为什么用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:不要问我为啥要用大地址空间,我就是想用!