หากฉันตั้งโปรแกรม - โดยไม่รู้ตัว - หน่วยความจำรั่วและแอปพลิเคชันหยุดทำงานหน่วยความจำที่รั่วไหลจะเป็นอิสระหรือไม่?
หากฉันตั้งโปรแกรม - โดยไม่รู้ตัว - หน่วยความจำรั่วและแอปพลิเคชันหยุดทำงานหน่วยความจำที่รั่วไหลจะเป็นอิสระหรือไม่?
คำตอบ:
ใช่ "หน่วยความจำรั่ว" เป็นเพียงหน่วยความจำที่กระบวนการไม่มีการอ้างอิงอีกต่อไปและไม่สามารถปล่อยให้ว่างได้อีกต่อไป ระบบปฏิบัติการยังคงติดตามหน่วยความจำทั้งหมดที่จัดสรรให้กับกระบวนการและจะทำให้หน่วยความจำว่างลงเมื่อกระบวนการนั้นสิ้นสุดลง
ในกรณีส่วนใหญ่ระบบปฏิบัติการจะทำให้หน่วยความจำว่างเช่นเดียวกับ "รสชาติ" ปกติของ Windows, Linux, Solaris เป็นต้นอย่างไรก็ตามสิ่งสำคัญคือต้องทราบว่าในสภาพแวดล้อมเฉพาะเช่นระบบปฏิบัติการแบบเรียลไทม์ต่างๆ หน่วยความจำอาจไม่ได้รับการปลดปล่อยเมื่อโปรแกรมสิ้นสุดลง
ระบบปฏิบัติการที่เรียกใช้โปรแกรมของคุณมักจะทำการล้างหน่วยความจำที่ไม่ได้รับการปลดปล่อยอย่างชัดเจนและจัดการที่ไม่ได้ปิดอย่างชัดเจน แต่มาตรฐาน C ++ ไม่รับประกัน คุณอาจพบอุปกรณ์ฝังตัวบางตัวที่ไม่ทำให้หน่วยความจำของคุณรั่วไหล
ที่กล่าวว่า Windows และ distros ทั้งหมดของ Linux ที่ฉันเคยเห็นมานั้นทำให้หน่วยความจำรั่วไหล
คุณสามารถสร้างการรั่วไหลของหน่วยความจำขนาดใหญ่ได้อย่างง่ายดายเพื่อทดสอบด้วยตัวคุณเอง ดูการใช้ RAM ของคุณเพิ่มขึ้นแล้วปิดโปรแกรมของคุณ คุณจะเห็นว่าการใช้งานแรมลดลง
ข้อควรพิจารณาอีกประการหนึ่งเมื่อใช้ C ++ คือหากคุณไม่ได้ลบหน่วยความจำที่จัดสรรฮีปของคุณผู้ทำลายของคุณจะไม่ถูกเรียกด้วย บางครั้งคุณอาจได้รับผลข้างเคียงอื่น ๆ เช่นกันหากไม่ได้เรียกผู้ทำลายของคุณ
คุณใช้ระบบปฏิบัติการเดสก์ท็อป (Windows, Linux ฯลฯ ) หรือไม่ ในกรณีนี้ใช่โดยทั่วไประบบจะเพิ่มหน่วยความจำที่เกี่ยวข้องกับโปรแกรมเมื่อโปรแกรมออก
โดยปกติแล้วใช่ บางระบบรองรับสิ่งต่างๆเช่นบล็อกหน่วยความจำแบบแบ่งใช้ที่ไม่ได้ปลดปล่อยโดยอัตโนมัติเมื่อโปรแกรมออกจากระบบ ส่วนใหญ่ยังคงนับการอ้างอิงและลบทิ้งเมื่อโปรแกรมทั้งหมดที่เปิดมันออก แต่มีไม่กี่รายการ (เช่น Windows 16 บิตมีรายการบางประเภทที่จะยังคงจัดสรรแม้ว่าจะไม่มีการอ้างถึงก็ตาม - แม้ว่า มันมักจะพังด้วยสาเหตุอื่นก่อนที่จะสะสมมากพอที่จะทำให้เกิดปัญหา ... )
เท่าที่ฉันรู้ระบบปฏิบัติการที่ทันสมัยจะทำให้หน่วยความจำนี้ว่างเมื่อโปรแกรมหยุดทำงาน
ขึ้นอยู่กับหน่วยความจำที่คุณรั่วไหล ระบบปฏิบัติการไม่สามารถเรียกคืนหน่วยความจำบางส่วนได้ อย่างไรก็ตามหน่วยความจำส่วนใหญ่ในระบบปฏิบัติการส่วนใหญ่จะถูกเรียกคืนโดยอัตโนมัติเมื่อกระบวนการออก