2

以下のように、一度に約 1.2G のメモリを割り当てるプログラムを作成し、Linux でテストしました。それから私は見つけました

  1. マクロ *WRITE_MEM* を定義した場合、物理メモリの使用量 (コマンドtopで検査) は直線的に増加します。
  2. マクロを定義しなかった場合、物理メモリの使用量は非常に小さく (約数百キロバイト)、大きく変化することはありません。

現象がわかりません。

#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;  
}  
4

1 に答える 1

4

Linuxは仮想メモリをすぐに割り当てますが、ページが実際に使用されるまで物理メモリでバックアップしません。これにより、プロセスは実際に必要な物理メモリのみを使用し、未使用のメモリをシステムの残りの部分で使用できるようにします。

于 2012-09-30T01:49:43.210 に答える