想象一下我在做一个游戏
- 我知道它将在 64 位系统、64 位操作系统上运行
- 游戏的内存预算是固定的2(或 4)Gibibytes
这是否意味着在Virtual Address Space
该过程的 64 位中,我会得到 32 位来随意玩?
例如,我可以为游戏中的每个容器(容器 = 类似的东西std::vector
)使用2 GBVirtualAlloc
的MEM_RESERVE
内存吗?
添加新元素时,会根据需要编辑新元素pages
(大约 64K)MEM_COMMIT
。随着容器死亡,相应地释放内存VirtualFree
。
出于好奇:
这在技术上可行吗?
是否有任何性能原因不这样做?
编辑:澄清:如果游戏中有 10000 个容器,那将保留2GiB * 10000 内存 - 但提交的内存将小于 2(或 4)GiB。
这 10000 个容器也可以增加到 2^16 个容器(或者地址空间允许的任何数量)。