【发布时间】:2013-02-01 09:17:11
【问题描述】:
我发现即使在我的程序中释放内存后,使用的内存量也会增加。所以我写了两个简单的 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获取已用内存信息,即结构体PROCESS_MEMORY_COUNTERS_EX的PrivateUsage字段。
输出如下:
MemUsed:Test1 开始时为 5544kb
MemUsed:最终5568kb
MemUsed:Test2 开始时为 5568kb
MemUsed: 6404kb 结束
我无法弄清楚输出。我希望在调用delete 之后,使用的内存量应该恢复到以前的值。使用的内存量与
运营商new和delete的电话号码。
【问题讨论】:
-
为了获得更好的帮助,请以可读的方式格式化您的代码。
-
@m0skit0 您阅读了整个问题还是只阅读了代码?
标签: c++ windows memory new-operator