看板 C_and_CPP 關於我們 聯絡資訊
請問一下各位 關於memory leak的情形 在c/c++的狀況中 如果配置了記憶體但是沒有釋放 最後該程式結束後 記憶體是否還會歸還作業系統 還是從此這段記憶體就無法再使用 直到下一次的作業系統重新開機 在早期公司的前輩們都是這樣說的 但是後來看了一些文章之後 好像並不是這樣 而java中的如果產生了memory leak 通常是該物件已經沒有在使用 但是有其他的物件還參照著這個指標的狀況 造成GC無法正常回收 請問在何種狀況下記憶體才會歸還 1. 該java程式結束後 2. 整個jvm結束 3. 必須等到作業系統重開 我在網路上查了很多 但是各家說法好像都不一樣 所以想請問一下大家的意見 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.61.13 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434597099.A.ECE.html
azureblaze: 1.一般作業系統程式結束就會還 06/18 11:36
azureblaze: 2. java板在隔壁但我相信是1. 06/18 11:37
azureblaze: 記憶體卡到重開是很嚴重的問題,現代OS不會讓你這樣搞 06/18 11:38
ctrlbreak: 對OS而言JVM才是應用程式 XD 06/18 11:57
azureblaze: 可是JVM裡的OS理論上也會處理吧 06/18 12:14
uranusjr: 一個 JVM 通常就是對應到一個 Java application, 所以 06/18 13:51
uranusjr: 對 Java 而言前兩個其實基本上對等; 對於 OS 而言 JVM 06/18 13:52
uranusjr: 本身就是一個程式, 所以和 C/C++ 狀況一樣, 會不會在程 06/18 13:53
uranusjr: 式結束回收要看 OS, 前面 free() 討論串有稍微討論到 06/18 13:54
Killercat: 第一個問題 非保護模式的幾乎是定番,一定中獎 06/18 15:44
Killercat: 但是保護模式的OS通常都能正確歸還 06/18 15:44
Killercat: 第二個問題雖然是java 不過查"weak reference java" 06/18 15:45
Killercat: C++有對應的std::weak_ptr可以用 06/18 15:45
Killercat: 請養成善用weak reference的好習慣 善待自己也善待別人 06/18 15:46
johnhmj: weak_ptr since C++11 http://goo.gl/CfrdpB 06/18 16:56
ireullin: 請問非保護模式是指? 06/18 17:11
Killercat: DOS跟大多數的MCU都是非保護模式,請google保護模式 06/18 17:16
Killercat: ....其實我一時忘了名詞 非保護模式應該直接叫真實模式 06/18 17:17
Killercat: 主流OS都是保護模式 包含Linux OSX跟Windows 06/18 17:18
Killercat: 另外 C++11之前 也有boost::weak_ptr能用 06/18 17:20
tinlans: 去 MCU 廠上班就會知道死了... XD 06/18 23:18
WPC001: C++11的weak ptr跟這有啥關係? 你真的清楚甚麼是weak_ptr? 06/19 20:31
WPC001: C++... boost不是唯一... 也沒有一定要用 06/19 20:33
Killercat: 這是相對於shared_ptr對gc的(原理不同 結果一樣) 06/19 20:57
Killercat: app結束回收是另外一件事,他一共問了三件事情 06/19 20:58
Killercat: weak_ptr指的是他講的「java memory leak」 06/19 20:59
Killercat: 歸納一下 他問了1.記憶體app結束釋放 2.java的"leak"跟 06/19 21:00
Killercat: 3.Java程式結束何時記憶體會「歸還」 06/19 21:00
Killercat: 而我回答的是2 順便跟他說這相當於c++11的weak_ptr 06/19 21:01
Killercat: 而普通reference可以比做shared_ptr 06/19 21:02