我有一个简单的 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)。这适用于大小〜< 200,但如果我声明更大的东西,当我再次减小大小时,内存似乎不会被释放。
下面是一个示例运行:我启动程序并选择大小 50。然后我在 50、100、150 和 200 之间更改大小,并看到内存使用量按预期上下波动。然后我选择大小 250,内存使用量按预期上升,但是当我回到 200 时,它并没有减少,而是增加到类似于大小分别为 200 和 250 所需的内存值的总和。较大的尺寸也会出现类似的行为。
知道发生了什么吗?