記得以前在寫C++的時候,
都說要注意記憶體漏洞,
萬一new了沒有釋放,
需要重開機才能釋放掉記憶體,
今天查了一下網路的資料,
好像說以前的作業系統會有這個問題,
不過現在的作業系統程式關掉之後就會處理掉記憶體,
不知道這樣的觀念正不正確,
有沒有人有在接觸這方面的,
可以討論分享一下,
感恩~
如果你指的是程式中使用 malloc
或 new
分配到的記憶體,那不管你怎麼惡搞,也不管程式是正常結束或是當掉強制結束,只要 process 結束就會釋放所有的記憶體。也包括所有的資源,File Descriptor,Socket 等等的都會釋放。
這個要驗證很簡單,一個 C++ 程式直接取個 5G 記憶體然後不釋放直接離開,你看一下工作管理員就知道到底有沒有釋放了。現代作業系統因為用的是 Virtual address space,因此在 process 死掉以後,這些記憶體都會自然被釋放掉。
但是程式中還有一些東西天生就設計成與 process 獨立,就算死掉了也會一直存在的資源。例如 shared memory,或是使用某些系統服務或呼叫(IPC),這一類的會在程式結束後繼續留存著,因此不會被釋放。
這邊是我猜想的,理論上剪貼簿可以塞 2G 的資料,你如果程式去塞滿剪貼簿再離開,那應該就不會被釋放。可能要等到剪貼簿被新的資料覆蓋才會釋放,或是看看它怎麼運作的。