地址窗口扩展

时间:2011-09-02 10:19:10

标签: c++ winapi memory 32-bit awe

我有一个32位应用程序,内存需求非常大。

我注意到有一种名为Address Windowing Extension的东西。

但是我没有找到关于如何使用它的更多信息,以及使用它时可能遇到的哪些缺点和问题?

2 个答案:

答案 0 :(得分:0)

  • 它不适用于64位版本的Windows(请参阅此处http://msdn.microsoft.com/en-us/library/aa366778.aspx英特尔和AMD的PAE规范确实支持x86-64架构,但微软PAE(API)的软件层称为AWE,在64位版本的Windows上不支持,因此对于32位应用程序,Windows Vista 64位不能为超过4 GiB的RAM归属。)。
  • 即使在Windows 32位上,对可用内存量有“许可”限制(同一页面显示所有限制)。
  • 显然编程很复杂:-)就像在8086上使用EMS一样。

答案 1 :(得分:0)

事实上,您可以在Windows操作系统64位内运行的32位应用程序中使用AWE,而且您不需要PAE。例如,可以在此模式下配置MS SQL Server(2012版之前)。

但除非你有一个非常具体的要求,否则最好选择移植到64位。

你有几个不利条件:

  • 需要与SeLockMemoryPrivilege
  • 的用户合作
  • 无法与其他进程共享内存。它分配在物理内存中。为操作系统和其他应用程序留下更少的内存(使用AllocateUserPhysicalPages)。
  • 您需要一个虚拟地址才能访问此类内存。所以你可以有一个带有LARGE_ADDRESS_AWARE标志的4GiB内存窗口。
  • 如果您想访问更多4GiB,您必须映射/取消映射这些物理页面(使用MapUserPhysicalPages)。

1999年的这个article解释了如何使用这种API。