我一直在阅读32位Windows应用程序仅限于2 GB RAM,因为高2GB的寻址空间是为Windows操作系统(以及iirc,VRAM)保留的。如果在32位WinXp上使用/ 3GB标志,则最多可以使用3 GB的RAM进行寻址,但通常需要使用userva值进行调整。我听说在64位版本的Windows上,PE头中有一个大的地址识别标志和超过4 GB的RAM,应用程序可以使用所有4 GB的寻址空间进行自己的内存管理。 / p>
另一方面,我很确定当你调用windows API时,你必须在你提供的32位地址空间内调用内存位置。那么,32位大地址识别应用程序在64位环境中可以使用多少RAM呢?为什么?
谢谢。
答案 0 :(得分:5)
虚拟地址空间扩展到4GB。如果不使用Address Windowing Extension API,则可以访问的最大内存量为4GB。操作系统会为.dll和其他类似的东西占用一些空间,但是你可以获得使用指针的所有32位的内存。
顺便提一下,如果你没有大地址识别,那么当转换为INT_PTR
时,所有内存指针都不会为负数。当使用大地址识别标志时,这实际上是一个不止一些微妙错误的来源,因为指针被处理为有符号值。