作者indept (真人)
看板C_and_CPP
标题[问题] C++ 释放阵列的问题
时间Fri Feb 20 07:05:30 2009
我试图宣告并释放一个简单的二维阵列,
在呼叫 func( 10000000,10 ); 的情况下记忆体似乎无法被释放,
用 top 看如下
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27342 aaaaaaa 20 0 461m 458m 920 R 100.0 22.7 0:09.85 b02.out
31753 root 20 0 261m 100m 8904 R 3.0 5.0 67:24.75 Xorg
32195 aaaaaaa 20 0 97608 34m 12m S 1.7 1.7 5:57.84 gnome-terminal
若选择 func( 1000000,100 ) 则记忆体成功释放,
27390 aaaaaaa 20 0 3396 1336 920 R 100.0 0.1 0:09.10 b02.out
31753 root 20 0 255m 94m 9096 S 2.0 4.7 67:28.05 Xorg
谁能告诉我是怎麽回事? 谢谢
// --------------
void everloop( const string &line ) {
cout << "everloop( "+line+" ):\n";
int rvalue=0;
for (;;) {
rvalue = rand();
if ( rvalue < 0 ) break;
}
}
void func( int length,int dimension ) {
int **sources = new int*[ length ];
for ( int i=0;i<length;i++ ) {
sources[i] = new int[ dimension ];
}
for ( int i=0;i<length;i++ ) {
delete [] sources[i];
}
delete [] sources;
}
int main() {
srand( time(0) );
func( 10000000,10 );
// func( 1000000,100 );
everloop( "main" );
}
// ----------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 171.64.92.108
1F:推 ledia:这要看 memory management 的程式库是怎麽实作的 02/20 10:15
2F:→ ledia:有可能在 alloc 比较小的时候他会留一些下来不每次 free 02/20 10:15
3F:→ ledia:可以供小额使用时的 buffer, 在频繁操作下速度会比较快 02/20 10:16
4F:→ ledia:如果 size 超过他设定的临界值才会同步还回给作业系统 02/20 10:16
5F:→ ledia:一般实作都有类似的设计, 真正怎麽实作就要看看 malloc/free 02/20 10:17
6F:→ ledia:的原始码了 02/20 10:17