【发布时间】:2013-12-03 00:21:43
【问题描述】:
我有一个简单的 c++ 程序,它使用多精度库 MPFR 来尝试理解更大程序中的内存问题:
int main() {
int prec=65536, size=1, newsize=1;
mpfr_t **mf;
while(true) {
size=newsize;
mf=new mpfr_t*[size];
for(int i=0;i<size;i++) {
mf[i]=new mpfr_t[size];
for(int j=0;j<size;j++) mpfr_init2(mf[i][j], prec);
}
cout << "Size of array: ";
cin >> newsize;
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) mpfr_clear(mf[i][j]);
delete [] mf[i];
}
delete [] mf;
}
}
这里的重点是声明不同大小的数组并使用任务管理器监控内存使用情况(我使用的是Windows)。这适用于大小〜
这是一个运行示例: 我启动程序并选择大小 50。然后我在 50、100、150 和 200 之间更改大小,并看到内存使用量按预期上升和下降。然后我选择大小 250,内存使用量按预期上升,但是当我回到 200 时,它并没有减少,而是增加到类似于大小 200 和 250 所需的内存值的总和。较大的尺寸也会出现类似的行为。
知道发生了什么吗?
【问题讨论】:
-
Windows 不一定会将您的程序内存释放回系统本身——因此任务管理器不会告诉您全部真相。你当然不能用它来检测/监控这样的内存泄漏。
-
这段代码没有内存泄漏(假设 mpfr_* 例程没有泄漏)。内存泄漏是指您的程序使用的内存较少,如果发生的只是系统可用的内存较少,那么这不是内存泄漏。
-
@noelicus 哦,我明白了.. 还有另一种方法可以在不使用 Windows IDE 的情况下检查内存使用情况吗?我正在使用 cygwin,但似乎命令 'top' 不可用。约翰:哦,我想我用错名字了
标签: c++ memory-leaks dynamic-memory-allocation dynamic-arrays multiprecision