作者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