为什么用VirtualAlloc无法保留一块比较大的连续地址空间呢?比如16G,下面函数执行就会失败:
VirtualAlloc(NULL,1024*1024*1024*16,MEM_RESERVE ,PAGE_NOACCESS );
不管是windows server 2012(datacenter X64)还是windows sever 2008 R2(standard x64)都分配失败,好像最多只能分配1G多,但是如果一点一点分配却能得到一个大的连续内存空间,如下可以分配到一个4G的连续地址空间:
LPVOID lp,lp1,lp2,lp3;
lp=VirtualAlloc(NULL,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp1=VirtualAlloc((BYTE*)lp+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp2=VirtualAlloc((BYTE*)lp1+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp3=VirtualAlloc((BYTE*)lp2+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS );难道这个一次分配的内存限定需要在系统某处设置?跪求牛人指点
我的开发环境:vs 2012 ultimate,项目编译目标就是X64,生成的事64位代码。
运行机器的物理内存是8G,分页文件无限制,系统自动。
ps:不要问我为啥要用大地址空间,我就是想用!
VirtualAlloc(NULL,1024*1024*1024*16,MEM_RESERVE ,PAGE_NOACCESS );
不管是windows server 2012(datacenter X64)还是windows sever 2008 R2(standard x64)都分配失败,好像最多只能分配1G多,但是如果一点一点分配却能得到一个大的连续内存空间,如下可以分配到一个4G的连续地址空间:
LPVOID lp,lp1,lp2,lp3;
lp=VirtualAlloc(NULL,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp1=VirtualAlloc((BYTE*)lp+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp2=VirtualAlloc((BYTE*)lp1+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS ); lp3=VirtualAlloc((BYTE*)lp2+1+1024*1024*1024,1024*1024*1024*1,MEM_RESERVE ,PAGE_NOACCESS );难道这个一次分配的内存限定需要在系统某处设置?跪求牛人指点
我的开发环境:vs 2012 ultimate,项目编译目标就是X64,生成的事64位代码。
运行机器的物理内存是8G,分页文件无限制,系统自动。
ps:不要问我为啥要用大地址空间,我就是想用!
解决方案 »
- 如何把一个CString类型的时间,比如说10:23:43,变为秒?
- 在VS2005 上编辑VC++6 源码 #import ...dll rename_namespace("CFX6") generate cs2039 error
- 一个CToolTipCtrl控件问题,高手不应该错过!!!!!
- 内存泄漏讨论专区........请列举导致内存泄漏的的所有情况.......
- 由CfileDialog导出一个新类,出现两个问题:(送分)
- arvid_gs(west)领分啦...........................................................................
- ---哪里有可以编辑简单黑白图形的类或控件,来着有分!---
- 菜鸟问题:请问如何用SDK进行二次开发?
- 关于动态创建DSN的问题
- 动态添加的编辑框如何添加Onfocus事件
- 浏览器插件读取特定文件
- xp系统下五笔输入法切换至智能abc程序异常
照理不需要在系统某处设置。
64位系统连2G的内存空间都申请不了,晕了,大家没碰到过?我感觉不是个案,我试了好几个64位windows系统,都不行,求指点