作者ii237 (羊咩)
看板C_and_CPP
標題[問題] 使用new的記憶體釋放問題
時間Sun Jul 26 18:37:46 2009
各位版友好
我想請問一下有關new 和 delete的問題
例如下面function
void function_1 (){
int *tmp = new int;
}
請問此function_1被呼叫執行後,使用new做出來的記憶體空間是否會被自動release掉?
我原本是認為,因為*tmp是function級的變數,因此function_1結束後*tmp這個用來存放
指標的空間會被release掉,因此它所指向的記憶體空間(new出來的記憶體)也會被放掉.
但後來想想好像不太對,因為C++也不像JAVA一樣有自動清除記憶體的功能.
我是想問說,在使用new時,若沒有配會delete,new出來的空間有可能由系統release掉嗎?
像是程式結束之類的.或是其實程式結束後記憶體依然沒有釋放?
但是因為我試過多次跑程式,再去看記憶體使用量,似乎也沒有增加的跡像.
題外話
會這麼問其實是因為,看了很多使用new的程式,似乎都沒有特別去做delete
不知道這是因為寫程式的人沒有做到正確記憶體釋放..或是這是可以接受的用法
請各位版友不吝指教,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.228.50
1F:→ netsphere:簡單來說 new出來的不會被自動delete 說完了 07/26 18:46
2F:推 VictorTom:tmp這個變數本身的空間會因為是區域變數的關係被釋放掉; 07/26 18:50
3F:→ VictorTom:但它所指向那塊new回來的空間則否, 需要自己做delete的. 07/26 18:50
4F:→ VictorTom:所以單以這個function來看, 就造成memory leak的情況了! 07/26 18:51
5F:推 psliurt:不知道你是怎麼觀察記憶體用量的,一個int在32bit的OS上面 07/26 19:47
6F:→ psliurt:頂多只有4byte,如果你跑個1000次,也只有4k。除非你迴圈 07/26 19:49
7F:→ psliurt:去跑,讓他跑個幾天,你再去看記憶體用量就會知道了... 07/26 19:50
8F:推 su31o4gj83:有 new 就有 delete 是種好習慣 07/26 20:08
9F:→ su31o4gj83:我在網路上有看到人說, 程式執行完後, 作業系統其實會 07/26 20:09
10F:→ su31o4gj83:釋放出記憶體(windows)....有人聽過這種說法嗎 ?? 07/26 20:13
11F:→ su31o4gj83:....我覺得不管怎樣, 最好還是保持好習慣.... 07/26 20:15
12F:推 Killercat:你用new/delete的話,作業系統會在你這個instance結束 07/27 09:53
13F:→ Killercat:時 把該instance的資源都釋放掉(98以後) 07/27 09:53
14F:→ Killercat:windows會介入instance資源的管理 07/27 09:54
15F:→ Killercat:但是這樣你程式沒結束,佔用空間會一直膨脹 07/27 09:54
16F:→ Killercat:甚至更衰小的,win32也是會有關不掉的zombie的 07/27 09:55