大地址识别标志如何适用于64位计算机上的32位应用程序?

The*_*oll 8 winapi memory-management portable-executable 32bit-64bit

我一直在阅读32位Windows应用程序限制为2 GB RAM,因为高2GB的寻址空间是为Windows操作系统(以及iirc,VRAM)保留的.如果在32位WinXp上使用/ 3GB标志,则最多可以使用3 GB的RAM进行寻址,但通常需要使用userva值进行调整.我听说在64位版本的Windows上,PE头中有一个大的地址识别标志和超过4 GB的RAM,应用程序可以使用所有4 GB的寻址空间进行自己的内存管理.

另一方面,我很确定当你调用windows API时,你必须在你提供的32位地址空间内调用内存位置.那么,32位大地址识别应用程序在64位环境中可以使用多少RAM呢?为什么?

谢谢.

MSN*_*MSN 5

虚拟地址空间扩展到4GB.如果不使用Address Windowing Extension API,则可以访问的最大内存量为4GB.一些空间将被操作系统用于.dll和其他类似的东西,但是你可以获得使用所有32位指针的内存.

顺便提一下,如果你不是大地址识别,所有内存指针在转换为a时都不会为负数INT_PTR.当使用大地址感知标志时,这实际上是一个不止一些微妙错误的来源,因为指针被处理为有符号值.

  • +1如果您打算在/ LARGEADDRESSAWARE下运行,请注意各种软件都有32位指针> 2GB的错误.甚至一些MS API函数(我在Vista上看你的GetCursorPos!)清除这些问题的方法,如果你需要解决这些问题就是使用[自上而下的内存分配](http://msdn.microsoft .com/ja-jp/isv/bb190527(l = en-us))使用注册表设置启用. (7认同)