Ubuntu ปล่อยหน่วยความจำที่จัดสรรโดยโปรแกรม C โดยอัตโนมัติเมื่อโปรแกรมยุติหรือไม่


11

ฉันได้เขียนโปรแกรม C ที่มีรหัสการจัดสรรหน่วยความจำโดยใช้malloc()ฟังก์ชั่น ถ้าฉันไม่เพิ่มหน่วยความจำด้วยfree()ฟังก์ชั่น Ubuntu จะปล่อยมันโดยอัตโนมัติหรือไม่?


มันไม่เกี่ยวอะไรกับ Ubuntu ความรับผิดชอบของเคอร์เนล
ผู้ใช้

@user: Ubuntu รุ่นใดรุ่นหนึ่งจะต้องทำงานบนหนึ่งในเคอร์เนลของ Linux ดังนั้นมันจึงมีบางอย่างเกี่ยวกับอูบุนตูเพื่อที่จะได้รู้ว่าเคอร์เนลนั้นทำงานอยู่ที่ปล่อยหน่วยความจำโดยอัตโนมัติหรือไม่
ashubuntu

คำตอบ:


16

ใช่.

เคอร์เนลจะปล่อยทรัพยากรทั้งหมดที่จัดสรรโดยโปรแกรมเมื่อการยกเลิกของโปรแกรม

สิ่งนี้จะทำหลังจากdo_exit()ฟังก์ชั่นที่กำหนดไว้ในkernel/exit.cนั้นได้ยุติการทำงานของมัน; do_exit()การดำเนินการการทำงานของตัวเองอาจจะถูกเรียกโดยจำนวนของเหตุการณ์มากที่สุดโดยชัดเจนexit()syscall เรียกโดยโปรแกรมในระหว่างการคำนวณปกติหรือโดยนัยexit()syscall เรียกโดยโปรแกรมเมื่อมีการยกเลิกของมัน (เป็นคอมไพเลอร์ซีวางexit()syscall หลังจากmain()'s กลับ) เหตุผลอื่น ๆ รวมถึงการรับสัญญาณที่ไม่สามารถจัดการได้ / ไม่สามารถมองข้ามได้หรือข้อยกเว้น

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

แหล่ง


7
แต่แน่นอนไม่มีข้อแก้ตัวสำหรับ "ลืม" ฟรี () ...
Hagen von Eitzen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.