网上对于AWE的解释都限于介绍,鲜有代码示例。问题是,VirtualAlloc/VirtualAllocEx的size_t参数在32位系统上最大就是4G了,那么4G-32G的空间如何能被分配和读写?如果我的需求就是"分配一个10G的空间,把第10G个字节设置成123",大虾能否给出最简单的代码片段呢?谢谢啊!

解决方案 »

  1.   

    微软不是给了官方例子了么,你看什么去了:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa366531.aspx
      

  2.   

    并不是直接用VirtualAlloc来分配AWE的内存。
    地址窗口扩展的意思是,用VirtualAlloc在你的进程空间里开个窗口(保留一个地址段)。利用AWE的AllocateUserPhysicalPages去分配没有分页的物理内存,并用MapUserPhysicalPages将它的局部映射到你开的窗口里去。
    因为AWE的内存是不分页的,所以它不会被虚拟内存机制交换到页面文件里去,总是在内存里的。
    建议你好好看看http://msdn.microsoft.com/en-us/library/windows/desktop/aa366527.aspx
    对其原理和特性的描述。
      

  3.   

    另外注意,你说到10GB,因为AWE是不分页的,所以它无法交换到页面文件,总是在物理内存。
    所以你AWE分配的越多,系统可用的物理内存就越少了,像分配个10GB什么的,如果你的系统物理内存在12GB一下的话,会很影响系统性能的。所以AWE不可贪心,还是要以自建的硬盘文件做交换(自己实现交换机制)比较好。