Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

เค้าโครงหน่วยความจำของโปรแกรม C


เลย์เอาต์หน่วยความจำสำหรับโปรแกรม C มีลักษณะดังนี้ มีไม่กี่ระดับ เหล่านี้คือ −

  • กลุ่มสแต็ก
  • ส่วนฮีป
  • ส่วนข้อความ
  • ส่วนข้อมูล

เค้าโครงหน่วยความจำของโปรแกรม C

ตอนนี้เรามาดูกันว่าส่วนต่างๆ เหล่านี้มีฟังก์ชันอะไรบ้าง

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

ส่วนข้อมูลสามารถแบ่งออกเป็นสองส่วนเพิ่มเติม

ซีเนียร์ ส่วนและคำอธิบาย
1 เริ่มต้นกลุ่มข้อมูล
นี่เป็นส่วนหนึ่งของอ็อบเจ็กต์ไฟล์หรือพื้นที่ที่อยู่เสมือนของโปรแกรมที่ประกอบด้วยตัวแปรสแตติกและตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าเริ่มต้น ส่วนข้อมูลที่ยังไม่ได้กำหนดค่าเริ่มต้นเรียกอีกอย่างว่าส่วน BSS (บล็อกที่เริ่มต้นโดยสัญลักษณ์)
2 กลุ่มข้อมูลที่ไม่ได้เริ่มต้น
นี่คือการอ่าน-เขียน เนื่องจากค่าของตัวแปรสามารถเปลี่ยนแปลงได้ระหว่างรันไทม์ ส่วนนี้ยังมีขนาดคงที่