首页 文章

在64位操作系统上32位进程可以访问多少内存?

提问于
浏览
75

在Windows上,在正常情况下,32位进程只能访问2GB的RAM(或者带有boot.ini文件中的特殊开关的3GB) . 在64位操作系统上运行32位进程时,可用内存量是多少?是否有任何特殊的开关或设置可以改变这种情况?

7 回答

  • -9

    默认为2 GB . 如果应用程序知道大地址空间(与/ LARGEADDRESSAWARE链接),它将获得4 GB(不是3 GB,请参阅http://msdn.microsoft.com/en-us/library/aa366778.aspx

    它们仍然限制在2 GB,因为许多应用程序依赖于指针的最高位为零 .

  • 14

    4 GB减去与/ LARGEADDRESSAWARE链接时系统使用的内容 .

    Of course, you should be even more careful with pointer arithmetic if you set that flag.

  • -1

    似乎没有人触及这样一个事实:如果你有许多不同的32位应用程序,wow64子系统可以将它们映射到4G以上的内存中,所以在具有足够内存的64位窗口上,你可以运行更多的32位应用程序而不是原生的32位系统 .

  • 17

    32位进程仍限于64位操作系统中的相同约束 . 问题是内存指针只有32位宽,因此程序无法分配/解析任何大于32位的内存地址 .

  • 76

    64位操作系统下的单个32位进程限制为2Gb . 但如果将其编译为设置了IMAGE_FILE_LARGE_ADDRESS_AWARE位的EXE文件,则其限制为4 GB,而不是2Gb - 请参阅https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

    在任何一种情况下,内核的虚拟地址空间都在所有进程之间共享 . 这就是为什么即使你有大量的32位进程,尽管你的64位操作系统可以使用大量内存,比如16 GB - 32位,但它们可能会耗尽内存 . 总共进程可以快速耗尽内核可用的虚拟地址空间(最大2GB) .

    您听到的有关特殊启动标志,3 GB,/ 3GB开关或/ userva的内容都与32位操作系统有关,不适用于64位Windows .

    有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx .

    至于32位操作系统,与此相反,32位操作系统没有4GB的物理限制 . 例如,32位服务器操作系统(如Microsoft Windows Server 2008 32位)可以访问最多 64 GB (Windows Server 2008 Enterprise和Datacenter版本) - 通过物理地址扩展(PAE),这是英特尔在Pentium Pro,后来由AMD在Athlon处理器中 - 它定义了三个级别的页表层次结构,每个表项为64位而不是32位,允许这些CPU直接访问大于4千兆字节的物理地址空间 - 理论上,32位操作系统理论上可以访问2 ^ 64字节,或17,179,869,184千兆字节,但该段受 4GB 限制 . 但是,由于市场原因,微软已将非服务器操作系统上的最大可访问内存限制为仅4GB,甚至3GB . 因此,单个进程可以在32位操作系统上访问超过4GB - 而Microsoft SQL服务器就是一个例子 .

  • 7

    在Win64下运行32位进程时,你有相同的基本限制 . 您的应用程序运行在一个32但子系统中,它最好看起来像Win32,这将包括您的进程的内存限制(为您降低2GB,为操作系统高2GB)

  • 2

    对于32位,限制不是2g或3gb,而是4gb .

    人们认为它的3gb的原因是操作系统显示3gb可用,因为它们确实有4GB系统内存 .

    它的总内存为4GB . 因此,如果您有一个1 GB的视频卡,它被视为32位操作系统查看的总RAM的一部分 .

    4Gig不是3不是2了吗?

相关问题