プログラムでメモリを解放した後でも、メモリの使用量が増加することがわかりました。そこで、それを検証するために 2 つの単純な 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
で API を呼び出して、構造体GetProcessMemoryInfo
のフィールドである使用済みメモリに関する情報を取得します。PrivateUsage
PROCESS_MEMORY_COUNTERS_EX
出力は次のとおりです。
MemUsed: Test1で 5544kb 開始 MemUsed:
終了
で 5568kb MemUsed: Test2 で 5568kb 開始
MemUsed: 終了で 6404kb
出力がわかりません。が呼び出された後、delete
使用されたメモリの量が以前の値に回復するはずです。使用されるメモリの量は、オペレータnew
およびの呼び出し番号に関連していますdelete
。