关于 VirtualAlloc 申请大虚拟内存问题?

icoder 2010-07-11 10:25:03
请教,现有问题:
在一个应用中要用到4G内存甚至更大,一般的机器不可能满足要求,所以要用到虚拟内存。
问题出现了:
pData = ::VirtualAlloc(NULL, nMemLen*sizeof(CUnit), MEM_RESERVE | MEM_COMMIT, AGE_READWRITE);
nMemLen*sizeof(CUnit)可能达到4-6G的内存,我在后续程序中直接就使用这些内存了,有时会出现莫名其妙的问题。
请教遇到这类问题如何解决???
...全文
92 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
凤朝凰 2010-07-13
支持楼上
回复
JessC 2010-07-12
AWE-地址窗口扩展 试一下
在没有系统没有打开3G开关的情况下,用户地址空间只有2G,一次的虚拟内存分配大小上限远小于2G。
VirtualAlloc(NULL, nMemLen*sizeof(CUnit), MEM_RESERVE | MEM_COMMIT, AGE_READWRITE); 之所以有时候还能分配成功,是因为当nMemLen*sizeof(CUnit)大于4G时会被截短为DWORD,别忘了32位只能寻址4G的地址空间,当nMemLen*sizeof(CUnit)为4.001G时,截短后的DWORD为0.001G也就是1M,windows认为你只想分配1M,所以分配成功了,但当你访问这1M后面的字节时,问题就来了,如果后面的内存没有提交或不可读,那么读时会引发读异常;如果后面的内存不写,写时会引发写异常;即便可写,同样意味着不远的将来会出错,因为那不已经不属于你的内存
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告