在動態配置記憶體時,C用malloc(),C++用new
而不管是在網路還是書籍上,都會強調必須在生命週期結束後將記憶體歸還回去
那麼如果是在程式crash或是我們手動將程式結束掉的情況下
這些動態配置的記憶體是os回收掉還是C&C++做回收?
作者:
sweetmiki (只有初音 沒有未來)
2018-09-07 19:42:00給你的雞雞一雙翅膀 跨國界尻槍
雞翅→G翅→G WING→GG WIN→GG double IN→GGININ
Crash 由 OS 收屍,手動結束有可能程式自己會處理後事當然程式如果沒有處理/來不及處理還是 OS 會收拾殘局具體的說就是用 atexit() 設定「辦後事」的 functionGUI 程式也可以設定按 X 或被 OS 通知結束時的行為那有沒有不會收屍的OS?有啊,程式crach就整台電腦當機
不當機還是會有OS不幫忙收拾的狀況 有些OS就是沒做
windows在O3層虛擬記憶體定址的話,OS直接就收掉如果是寫驅動程式的話,就要很小心了
作者:
cphe (魔鬼藏在垃圾筒裡)
2019-09-15 18:51:00OS會收,通常會考慮leak的狀況是,很多程式其實是一直在背景跑不會結束,如果不free就會一直吃memory ,直到被terminate
作者:
arshuan (阿軒)
2019-11-17 14:18:00你一般user space的程式在執行就是OS allocate 一塊記憶體給你 你不管怎麼用不管靜態或動態配置都不可能超出那塊, 程式關閉後OS自然把整塊記憶體回收 所以不用擔心會有任何memory leak影響到整個系統我上面講的可能不太對 應該說你程式跟OS要過多少記憶體OS都有紀錄 所以程式關閉時OS一定會把所有配給該程式的記憶體收回 但是如果你程式沒關閉又一直要記憶體 OS當然不會去回收 才會導致所謂的memory leak