Virtual Memory Layout

Memory Layout Diagram

คำอธิบายเกี่ยวกับ Memory Layout

ในระบบคอมพิวเตอร์ การจัดการหน่วยความจำถูกแบ่งออกเป็นส่วนต่างๆ ที่มีหน้าที่และคุณสมบัติที่แตกต่างกัน โดยทั่วไปแบ่งออกเป็นสามส่วนหลักคือ Stack, Heap, และ Static ซึ่งแต่ละส่วนมีลักษณะเฉพาะตัวดังนี้:

Stack

  • Content:
    • Function arguments
    • Local variables ที่รู้ขนาดตั้งแต่ช่วงที่ compile
  • Size:
    • ขนาดไดนามิก แต่มีขีดจำกัดที่ตั้งไว้
  • Lifetime:
    • ตามอายุของฟังก์ชันที่สร้างขึ้น

Stack ถูกใช้เพื่อจัดเก็บข้อมูลที่มีขนาดคงที่และมีอายุการใช้งานสั้น เช่น ตัวแปรภายในฟังก์ชัน ซึ่งข้อมูลบน stack จะถูกจัดเก็บและลบออกอย่างเป็นระบบตามลำดับการเรียกใช้งานฟังก์ชัน

Heap

  • Content:
    • ข้อมูลที่มีขนาดใหญ่
    • ข้อมูลที่ไม่รู้ขนาดในช่วงที่ compile
    • ข้อมูลที่จะต้องมีอายุอยู่นานกว่าอายุของฟังก์ชัน
  • Size:
    • ขนาดไดนามิก ไม่มีขีดจำกัด
  • Lifetime:
    • แต่ละภาษาจัดการไม่เหมือนกัน

Heap ใช้สำหรับจัดเก็บข้อมูลที่มีขนาดใหญ่หรือข้อมูลที่ขนาดไม่สามารถระบุได้ในขณะ compile โดยข้อมูลบน heap จะมีอายุการใช้งานยาวนานกว่า stack และการจัดการหน่วยความจำบน heap มักจะต้องมีการจัดการด้วยตนเองหรือผ่าน garbage collector ขึ้นอยู่กับภาษาโปรแกรมที่ใช้งาน

Static

  • Content:
    • ตัวแปรแบบ static
    • string literals
    • ไบนารี
  • Size:
    • ขนาดคงที่
  • Lifetime:
    • ตลอดอายุของโปรเซส หากโปรเซสถูกยุติ ข้อมูลก็จะถูกลบออกด้วย

ส่วน Static ใช้สำหรับจัดเก็บข้อมูลที่ต้องการอยู่ตลอดอายุของโปรเซส เช่น ตัวแปรคงที่ที่ไม่เปลี่ยนแปลงระหว่างการทำงานของโปรแกรม ข้อมูลเหล่านี้จะถูกจัดเก็บในพื้นที่หน่วยความจำแบบ static และไม่ถูกลบออกจนกว่าโปรเซสจะสิ้นสุด