วัน: 27 เมษายน 2024

Heap Memory คืออะไรHeap Memory คืออะไร

Heap Memory คือ พื้นที่หน่วยความจำ ส่วนหนึ่งที่ระบบปฏิบัติการเตรียมไว้ให้โปรแกรมใช้สำหรับ จองหน่วยความจำแบบไดนามิก ในระหว่างที่โปรแกรมกำลังทำงาน เพื่อให้เห็นภาพรวมง่ายขึ้น มักจะนำไปเปรียบเทียบกับ Stack Memory ครับ


ลักษณะเด่นของ Heap Memory

  • ขนาดและอายุขัยไม่ตายตัว: พื้นที่ใน Heap จะถูกจองก็ต่อเมื่อโปรแกรมสั่งรันไทม์เท่านั้น และข้อมูลจะอยู่ไปเรื่อย ๆ จนกว่าจะถูกสั่งลบหรือจัดการทิ้ง ไม่ได้หายไปทันทีเมื่อจบฟังก์ชัน
  • ใช้เก็บข้อมูลขนาดใหญ่หรือซับซ้อน: พวก Object, Array, String หรือโครงสร้างข้อมูลที่มีขนาดไม่แน่นอนตอนคอมไพล์ จะถูกโยนมาเก็บไว้ที่นี่
  • การเข้าถึงข้อมูลช้ากว่า: การอ่านเขียนข้อมูลบน Heap ต้องทำผ่าน Pointer ที่เก็บที่อยู่ ของข้อมูลนั้นอีกที ทำให้กระบวนการทำงานช้ากว่า Stack
  • เสี่ยงต่อ Memory Leak: หากโปรแกรมจองพื้นที่ไว้แล้วไม่ยอมคืนระบบ จะทำให้ RAM เต็มและโปรแกรมค้างได้

การจัดการ Heap ในภาษาโปรแกรมต่าง ๆ

วิธีการที่แต่ละภาษาใช้จัดการขยะ (ข้อมูลที่ไม่ได้ใช้แล้ว) บน Heap จะแตกต่างกันไปครับ

  • จัดการผ่าน Garbage Collector : ในภาษาอย่าง C# หรือ Java ข้อมูลที่เป็น Class หรือ Reference Type จะถูกนำไปเก็บไว้ใน Heap ทั้งหมด เมื่อเราเลิกใช้งานตัวแปรนั้นแล้ว ระบบจะมี Garbage Collector คอยวิ่งตรวจจับและตามล้างพื้นที่ Heap ให้โดยอัตโนมัติ
  • จัดการด้วยตัวเอง : ในภาษาอย่าง C หรือ C++ โปรแกรมเมอร์ต้องใช้คำสั่งจอง และคืนพื้นที่ ด้วยตัวเองทั้งหมด ถ้าลืมคืนก็เกิด Memory Leak ทันที
  • จัดการผ่านระบบ Ownership: ภาษาอย่าง Rust จะใช้แนวคิด Ownership และ Borrowing มาคุมการใช้งานตัวแปร โดยระบบจะรู้ได้เองตอนคอมไพล์ว่าจังหวะไหนควรคืนพื้นที่ Heap ทันทีเมื่อตัวแปรหลุดจาก Scope ทำให้จัดการ Heap ได้อย่างปลอดภัยโดยไม่ต้องพึ่งพาระบบ GC ให้หน่วงเครื่อง

สรุปความต่าง Heap vs Stack แบบรวบรัด

คุณสมบัติStack MemoryHeap Memory
การจองพื้นที่อัตโนมัติ ไดนามิก
ความเร็วเร็วมากช้ากว่า
ขนาดพื้นที่จำกัดและเล็กกว่าใหญ่มาก
สิ่งที่มักจะเก็บValue Types , PointersReference Types

อ่านเพิ่มเติม