
การจัดการหน่วยความจำ
Stack vs heap, escape analysis, garbage collector, การทำ memory profiling, pprof, memory leaks
1ความแตกต่างหลักระหว่างการจัดสรรบน stack และการจัดสรรบน heap ใน Go คืออะไร?
ความแตกต่างหลักระหว่างการจัดสรรบน stack และการจัดสรรบน heap ใน Go คืออะไร?
คำตอบ
stack ถูกจัดการโดยอัตโนมัติและการจัดสรรทำได้รวดเร็วมาก (เพียงแค่ขยับ stack pointer) ตัวแปรบน stack จะถูกคืนหน่วยความจำโดยอัตโนมัติเมื่อฟังก์ชัน return ส่วน heap จำเป็นต้องใช้ garbage collector ในการคืนหน่วยความจำและการจัดสรรช้ากว่าเพราะเกี่ยวข้องกับ Go runtime ตัวแปรที่ยังคงอยู่หลังจบฟังก์ชันหรือมีขนาดที่ไม่ทราบในเวลาคอมไพล์จะไปอยู่บน heap
2escape analysis ใน Go คืออะไร?
escape analysis ใน Go คืออะไร?
คำตอบ
escape analysis คือการวิเคราะห์แบบสแตติกที่คอมไพเลอร์ Go ทำเพื่อตัดสินว่าตัวแปรสามารถอยู่บน stack ได้หรือต้องจัดสรรบน heap หากคอมไพเลอร์ตรวจพบว่าตัวแปรถูกอ้างอิงนอกฟังก์ชันที่สร้างมัน (ผ่านพอยน์เตอร์ที่ส่งคืน การเก็บในตัวแปร global ฯลฯ) ตัวแปรนั้นจะ 'escape' และถูกจัดสรรบน heap การวิเคราะห์นี้ช่วยปรับการจัดสรรหน่วยความจำให้เหมาะสมโดยอัตโนมัติ
3จะดูผลลัพธ์ของ escape analysis ระหว่างการคอมไพล์ได้อย่างไร?
จะดูผลลัพธ์ของ escape analysis ระหว่างการคอมไพล์ได้อย่างไร?
คำตอบ
แฟล็ก -gcflags=-m ช่วยให้ดูการตัดสินใจของ escape analysis ได้ การใช้ -m=2 หรือ -m=3 จะให้รายละเอียดมากขึ้นว่าทำไมตัวแปรถึง escape ตัวอย่างเช่น 'go build -gcflags=-m=2' จะแสดงข้อความเช่น 'moved to heap: x' เพื่อบ่งบอกว่าตัวแปรถูกย้ายไปยัง heap เครื่องมือนี้จำเป็นสำหรับการปรับการจัดสรรหน่วยความจำในโค้ดที่สำคัญให้เหมาะสม
ในกรณีใดที่ตัวแปร local จะ escape ไปยัง heap?
บทบาทหลักของ garbage collector ใน Go คืออะไร?
+21 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Go อื่นๆ
พื้นฐาน Go
โครงสร้างข้อมูล Go
อินเทอร์เฟซใน Go
การจัดการข้อผิดพลาด
พื้นฐาน Goroutine
Channels
Go Modules
เซิร์ฟเวอร์ HTTP
ไคลเอนต์ HTTP
การเข้ารหัส JSON
Database/SQL
แพ็กเกจ context
Testing
รูปแบบ Concurrency
ไพรมิทีฟการซิงโครไนซ์
เฟรมเวิร์กเว็บ Go
การออกแบบ REST API
gRPC
Reflection
การเพิ่มประสิทธิภาพการทำงาน
Generics
Go Design Patterns
Microservices
ความปลอดภัยและการยืนยันตัวตน
Docker & Containerization
Kubernetes Basics
Go ขั้นสูง
การพัฒนา CLI
เชี่ยวชาญ Go สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี