我发现即使在我的程序中释放内存后,使用的内存量也会增加。所以我写了两个简单的 C++ 测试程序来验证它。
#define NUM 1000000
void Test1()
{
PrintMemory("Test1 Beginning");
double* Data = new double[NUM];
for(int i = 0; i < NUM; i++)
{
Data[i] = std::rand() % 1000;
}
double sum = 0;
for(int i = 0; i < NUM; i++)
{
sum += Data[i];
}
delete [] Data;
PrintMemory("end");
}
double* Data[NUM];
void Test2()
{
PrintMemory("Test2 Beginning");
for(int i = 0; i < NUM; i++)
{
Data[i] = new double;
*(Data[i]) = std::rand() % 1000;
}
double sum = 0;
for(int i = 0; i < NUM; i++)
{
sum += *(Data[i]);
}
for(int i = 0; i < NUM; i++)
{
delete Data[i];
}
PrintMemory("end");
}
void main()
{
Test1();
Test2();
}
在函数中PrintMemory
,我调用 APIGetProcessMemoryInfo
来获取有关已用内存的信息,即PrivateUsage
结构的字段PROCESS_MEMORY_COUNTERS_EX
。
输出如下:
MemUsed:Test1 开始
时为 5544kb MemUsed:结束时
为 5568kb MemUsed:Test2 开始
时为 5568kb MemUsed:结束时为 6404kb
我无法弄清楚输出。我希望在delete
调用之后,使用的内存量应该恢复到以前的值。使用的内存量与操作员的调用号new
和delete
.