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