2011-08-14 7 views
2

私はHeapAllocを使って400 MBのような大量のメモリを割り当てますが、私のプログラムのメモリ使用量をチェックすると、実際には1 GBのように使います。ポインターを使用しているときにシステムがより多くのメモリーを割り当てる理由Windows?

//configuraciones.h 
#define ANCHO_MUNDO 5000 
#define ALTO_MUNDO 5000 

//unidades.cpp 
unidad* unidades_memoria = (unidad*)HeapAlloc(heap, //User Heap 
     NULL,ANCHO_MUNDO*ALTO_MUNDO*sizeof unidad); 

unidad*** unidades = new unidad**[ANCHO_MUNDO]; //Default Heap 
for(int i = 0; i < ANCHO_MUNDO;i++) 
    unidades[i] = new unidad*[ALTO_MUNDO]; 

unidad* actual = unidades_memoria; 
unsigned int id = 0; 

私は私のプログラムをdebuged、私はこのコードが実行されるとき

for (int y = 0; y < ALTO_MUNDO;y++) 
    for (int x = 0; x < ANCHO_MUNDO;x++) 
    { 
    unidades[x][y] = actual; 
    actual++; 
    unidades[x][y]->id = id; 
    id++; 
    unidades[x][y]->dueño = 0; 
    memset(&unidades[x][y]->addr,0,sizeof(unidades[x][y]->addr)); 
    } 

ですが、なぜでしょうメモリ使用icreasesことに気づきました?

+0

unidad、ANCHO_MUNDOおよびALTO_MUNDOの宣言は何ですか?あなたはあなたが思っているよりも多くのメモリを求めているかもしれませんが、型とマクロの宣言を見ることなく理解するのは難しいです。 –

答えて

1

メモリを割り当てると、すべての仮想アドレス空間がすぐに取得されますが、実際に各ページに書き込むまでは物理メモリにマップされません。最初にページに書き込むと、ページフォルトが生成され、その時点でOSはメモリの物理ページにマップし、ページフォルトを生成した操作を再開します。

これは最適化です。プログラムが膨大な量のメモリを割り当てているにもかかわらず、その一部しか使用していないことが判明した場合、OSは物理メモリをマップする必要はなく、プログラムはもしそれがそのすべての記憶を持っていれば。

+0

そして、余分なメモリ使用量は、索引のようなものですか? – felknight

関連する問題