以下のように、一度に約 1.2G のメモリを割り当てるプログラムを作成し、Linux でテストしました。それから私は見つけました
- マクロ *WRITE_MEM* を定義した場合、物理メモリの使用量 (コマンドtopで検査) は直線的に増加します。
- マクロを定義しなかった場合、物理メモリの使用量は非常に小さく (約数百キロバイト)、大きく変化することはありません。
現象がわかりません。
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
float sum = 0.;
int main (int argc, char** argv)
{
float* pf = (float*) malloc(1024*1024*300*4);
float* p = pf;
for (int i = 0; i < 300; i++) {
cout << i << "..." << endl;
float* qf = (float *) malloc(1024*1024*4);
float* q = qf;
for (int j = 0; j < 1024*1024; j++) {
*q++ = sin(j*j*j*j) ;
}
q = qf;
for (int j = 0; j < 1024*1024; j++) {
#ifdef WRITE_MEM // The physical memory usage will increase linearly
*p++ = *q++;
sum += *q;
#else // The physical memory usage is small and will not change
p++;
// or
// sum += *p++;
#endif
}
free(qf);
}
free(pf);
return 0;
}