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