我需要帮助理解在Windows上内存分配和释放的问题。我正在使用VS11编译器(VS2012 IDE)和最新的更新(Update 3 RC)。
问题是:我动态分配了一些内存用于二维数组,然后立即释放它。然而,在内存分配之前,我的进程内存使用情况是0.3MB,在分配时为259.6MB(预期值,因为将分配32768个64位int(8字节)的数组),在分配过程中为4106.8MB,但在释放内存后,内存没有降到预期的0.3MB,而是停留在12.7MB。由于我释放了所占用的所有堆内存,我期望内存回到0.3MB。
以下是我使用的C++代码:
问题是:我动态分配了一些内存用于二维数组,然后立即释放它。然而,在内存分配之前,我的进程内存使用情况是0.3MB,在分配时为259.6MB(预期值,因为将分配32768个64位int(8字节)的数组),在分配过程中为4106.8MB,但在释放内存后,内存没有降到预期的0.3MB,而是停留在12.7MB。由于我释放了所占用的所有堆内存,我期望内存回到0.3MB。
以下是我使用的C++代码:
#include <iostream>
#define SIZE 32768
int main( int argc, char* argv[] ) {
std::getchar();
int ** p_p_dynamic2d = new int*[SIZE];
for(int i=0; i<SIZE; i++){
p_p_dynamic2d[i] = new int[SIZE];
}
std::getchar();
for(int i=0; i<SIZE; i++){
for(int j=0; j<SIZE; j++){
p_p_dynamic2d[i][j] = j+i;
}
}
std::getchar();
for(int i=0; i<SIZE; i++) {
delete [] p_p_dynamic2d[i];
}
delete [] p_p_dynamic2d;
std::getchar();
return 0;
}