เลย์เอาต์หน่วยความจำสำหรับโปรแกรม C มีลักษณะดังนี้ มีไม่กี่ระดับ เหล่านี้คือ −
- กลุ่มสแต็ก
- ส่วนฮีป
- ส่วนข้อความ
- ส่วนข้อมูล
ตอนนี้เรามาดูกันว่าส่วนต่างๆ เหล่านี้มีฟังก์ชันอะไรบ้าง
ซีเนียร์ | ส่วนและคำอธิบาย |
---|---|
1 | กอง กองกระบวนการประกอบด้วยข้อมูลชั่วคราว เช่น พารามิเตอร์วิธีการ/ฟังก์ชัน ที่อยู่ผู้ส่ง และตัวแปรในเครื่อง เป็นพื้นที่ของหน่วยความจำที่จัดสรรสำหรับตัวแปรอัตโนมัติและพารามิเตอร์ของฟังก์ชัน นอกจากนี้ยังเก็บที่อยู่ผู้ส่งขณะเรียกใช้ฟังก์ชัน Stack ใช้กลไก LIFO (เข้าก่อนออกก่อน) เพื่อจัดเก็บตัวแปรในเครื่องหรือตัวแปรอัตโนมัติ พารามิเตอร์ของฟังก์ชัน และการจัดเก็บที่อยู่ถัดไปหรือที่อยู่ผู้ส่ง ที่อยู่ผู้ส่งหมายถึงที่อยู่ที่จะส่งคืนหลังจากดำเนินการฟังก์ชันเสร็จสิ้น ขนาดเซ็กเมนต์นี้เป็นตัวแปรตามตัวแปรโลคัล พารามิเตอร์ของฟังก์ชัน และการเรียกใช้ฟังก์ชัน ส่วนนี้เติบโตจากที่อยู่ที่สูงกว่าเป็นที่อยู่ต่ำกว่า |
2 | กอง นี่คือหน่วยความจำที่จัดสรรแบบไดนามิกให้กับกระบวนการระหว่างรันไทม์ นี่คือพื้นที่ของหน่วยความจำที่จัดสรรสำหรับการจัดเก็บหน่วยความจำแบบไดนามิก เช่น สำหรับการเรียก malloc() และ calloc() ขนาดเซ็กเมนต์นี้แปรผันตามการจัดสรรผู้ใช้ ส่วนนี้เติบโตจากที่อยู่ต่ำกว่าเป็นที่อยู่ที่สูงขึ้น ให้เราตรวจสอบว่าขนาดเซ็กเมนต์ (ข้อมูลและเซ็กเมนต์ bss) แตกต่างกันอย่างไรด้วยโปรแกรมตัวอย่างบางโปรแกรม ขนาดเซ็กเมนต์เป็นที่รู้จักโดยดำเนินการคำสั่ง "ขนาด" |
3 | ข้อความ ซึ่งรวมถึงกิจกรรมปัจจุบันที่แสดงโดยมูลค่าของตัวนับโปรแกรมและเนื้อหาของการลงทะเบียนของผู้ประมวลผล มันถูกแสดงโดยส่วน .text สิ่งนี้กำหนดพื้นที่ในหน่วยความจำที่เก็บรหัสคำสั่ง นี้ยังเป็นพื้นที่คงที่ |
4 | ข้อมูล ส่วนนี้ประกอบด้วยตัวแปรโกลบอลและสแตติก มันถูกแสดงโดยส่วน .data และ .bss ส่วน .data ใช้เพื่อประกาศขอบเขตหน่วยความจำ ซึ่งองค์ประกอบข้อมูลจะถูกเก็บไว้สำหรับโปรแกรม ส่วนนี้ไม่สามารถขยายได้หลังจากประกาศองค์ประกอบข้อมูลแล้ว และจะยังคงเป็นแบบคงที่ตลอดทั้งโปรแกรม ส่วน .bss ยังเป็นส่วนของหน่วยความจำแบบคงที่ที่มีบัฟเฟอร์สำหรับข้อมูลที่จะประกาศในภายหลังในโปรแกรม หน่วยความจำบัฟเฟอร์นี้ถูกเติมเป็นศูนย์ |
ส่วนข้อมูลสามารถแบ่งออกเป็นสองส่วนเพิ่มเติม
ซีเนียร์ | ส่วนและคำอธิบาย |
---|---|
1 | เริ่มต้นกลุ่มข้อมูล นี่เป็นส่วนหนึ่งของอ็อบเจ็กต์ไฟล์หรือพื้นที่ที่อยู่เสมือนของโปรแกรมที่ประกอบด้วยตัวแปรสแตติกและตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าเริ่มต้น ส่วนข้อมูลที่ยังไม่ได้กำหนดค่าเริ่มต้นเรียกอีกอย่างว่าส่วน BSS (บล็อกที่เริ่มต้นโดยสัญลักษณ์) |
2 | กลุ่มข้อมูลที่ไม่ได้เริ่มต้น นี่คือการอ่าน-เขียน เนื่องจากค่าของตัวแปรสามารถเปลี่ยนแปลงได้ระหว่างรันไทม์ ส่วนนี้ยังมีขนาดคงที่ |