gpt4 book ai didi

windows - 为什么系统在使用指针 Windows 时分配更多内存?

转载 作者:可可西里 更新时间:2023-11-01 10:39:31 25 4
gpt4 key购买 nike

我使用 HeapAlloc 分配大量内存,例如 400 MB,但是当我检查程序的内存使用情况时,它实际上使用了 1 GB。

//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;

我调试了我的程序,我意识到执行这段代码时内存使用量增加了

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));
}

为什么会这样??

最佳答案

分配内存时,您会立即获得所有虚拟地址空间,但在您实际写入每个页面之前,它不会映射到物理内存中。当您第一次写入页面时,它会产生页面错误,此时操作系统将映射到内存的物理页面并重新启动产生页面错误的操作。

这是一种优化——如果事实证明您的程序分配了大量内存但只使用了其中的一小部分,则操作系统永远不必映射物理内存,并且您的程序可以假装好像它拥有所有这些内存。

关于windows - 为什么系统在使用指针 Windows 时分配更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com