想象我正在做一个游戏
那是否意味着在该过程的
Virtual Address Space
的64位中,我可以剩下32位来玩呢?例如,我可以为游戏中的每个容器(容器=类似于
std::vector
)使用VirtualAlloc
和MEM_RESERVE
2吉字节的内存吗?添加新元素后,将根据需要添加新的
pages
(大约64K)。容器死亡后,将相应地使用MEM_COMMIT
释放内存。出于好奇:
编辑:澄清:如果游戏中有10000个容器,那将保留2GiB * 10000个内存-但是提交的内存将小于2(或4)GiB。
那些10000个容器也可以增加到2 ^ 16个容器(或地址空间允许的数目很多)。
最佳答案
是的,它可以正常工作。
当我使用它1时,我发现将内存分配给它仍然是最好的方法,首先从相当大的内存块(例如,兆字节)开始,然后按照大小的几何级数递增。调用VirtualAlloc
(显然)需要切换到内核模式,因此如果您有帮助的话,您有足够的开销避免经常执行此操作。
1.虽然那是很早以前的事-Windows NT 4或Win2K时间框架,所以此后情况可能已经改变。