Windows(x86)下,由于进程的地址空间只有4G,而实际上可以使用的虚拟地址空间也就2G左右。如果有需求,需要分配较大的内存,比如需要分配16G的内存空间,以作特殊用途,如做大缓存,则可以使用AWE(地址窗口扩展),同时还需要开启PAE,这里有个限制,就是只有Server系统才能开启PAE,方法是在boot.ini里添加/PAE选项,对于2008 Server需要在BCDEdit里进行编辑。
由于要分配大内存,需要锁定内存页,需要在组策略里做如下配置:
计算机配置-->Windows设置-->安全设置-->本地策略-->用户权限分配,在右侧双击“内存中锁定页面”,添加当前系统账户,然后重启系统即可。
AWE应用步骤:
1 调用HeapAlloc,在堆上分配空间,存储即将要分配的内存页框架数量
2 获取锁定内存页的权限
3 调用AllocateUserPhysicalPages分配物理内存页
4 调用VirtualAlloc,在进程的虚拟地址空间分配一个AWE窗口,以做映射使用
5 调用MapUserPhysicalPages,映射到4里面分配的AWE窗口上或者调用此方法取消映射
6 调用FreeUserPhysicalPages、VirtualFree和HeapFree,释放资源