Windows 为什么进程不能在32位系统中寻址4GB内存?

Windows 为什么进程不能在32位系统中寻址4GB内存?,windows,system,32bit-64bit,32-bit,Windows,System,32bit 64bit,32 Bit,有人知道为什么在32位Windows系统中,进程不能处理4GB内存,而只能处理2GB内存 这只是Windows系统的一个限制吗 注:我指的不是可寻址的总内存,而是可通过单个进程寻址的内存。简单的答案是,一些虚拟地址空间是为操作系统保留的,以便将内容映射到其中,例如其自身的内存空间、VM页表、硬件设备等 从理论上讲,它可以提供更多的可用性,事实上,您可以告诉Windows让您拥有~3GB,尽管它在默认情况下不会启用,以防某些软件/驱动程序/etc出现问题,但如果不削弱操作系统高效运行系统的能力,您

有人知道为什么在32位Windows系统中,进程不能处理4GB内存,而只能处理2GB内存

这只是Windows系统的一个限制吗


注:我指的不是可寻址的总内存,而是可通过单个进程寻址的内存。

简单的答案是,一些虚拟地址空间是为操作系统保留的,以便将内容映射到其中,例如其自身的内存空间、VM页表、硬件设备等

从理论上讲,它可以提供更多的可用性,事实上,您可以告诉Windows让您拥有~3GB,尽管它在默认情况下不会启用,以防某些软件/驱动程序/etc出现问题,但如果不削弱操作系统高效运行系统的能力,您将无法获得全部4GB


即使在windows上将用户空间扩展到3GB,默认情况下应用程序也不会获得额外的范围。Windows要求应用程序在MSVC下使用/LargeAddressWare进行标志集生成,不知道其他生成环境,或者它们被限制为2GB,以避免因软件对地址进行假设而导致的任何问题。

简单的答案是,保留了一些虚拟地址空间,以便操作系统将内容映射到其中,如自身的内存空间、VM页表、硬件设备等

从理论上讲,它可以提供更多的可用性,事实上,您可以告诉Windows让您拥有~3GB,尽管它在默认情况下不会启用,以防某些软件/驱动程序/etc出现问题,但如果不削弱操作系统高效运行系统的能力,您将无法获得全部4GB


即使在windows上将用户空间扩展到3GB,默认情况下应用程序也不会获得额外的范围。Windows要求应用程序在MSVC下使用/LargeAddressWare进行标志集生成,不知道其他生成环境,或者它们被限制为2GB,以避免因软件对地址进行假设而导致的任何问题。

32位Windows系统在用户和系统之间平均分配4GB虚拟内存范围,这样每一个都只有2GB的虚拟可用空间


请参阅:

32位Windows系统在用户和系统之间平均分配4GB虚拟内存范围,这样每个系统只有2GB虚拟可用空间

见:

为什么在32位Windows系统中进程无法寻址4GB内存

但他们肯定能做到。您的代码通常不具有寻址地址空间上部所需的访问权限。用户模式代码在环3上运行,要访问上半部分,您需要环0访问权限。内核模式

好吧,这有点开玩笑,操作系统内核和具有环0访问权限的驱动程序通常不被认为是进程的一部分。尽管它们在逻辑上是相同的,但它们在每个进程中都映射到相同的地址。从技术上讲,当进程从环3模式切换到环0模式时,动态地映射页面是可能的,但这会使内核模式转换过于昂贵和繁琐

直观地说:由ReadFile填充的文件缓冲区可能会有一个与操作系统代码或数据块重叠的地址。最坏的情况是,它可能与文件系统驱动程序代码重叠。或者更可能是文件系统缓存。所需的翻页和重复复印会使阅读速度慢得出人意料。最简单的体系结构选择是将地址空间一分为二,这样就不可能有重叠,这是1992年做出的一个选择,当时没有人有钱能买得起1GB的RAM

这是一个解决了的问题,32位版本的Windows越来越少,32位进程可以在64位版本的Windows上处理4G字节。它只需要EXE头中的一个选项位,该选项位由链接器和editbin.EXE中可用的/largeaddressware选项设置

为什么在32位Windows系统中进程无法寻址4GB内存

但他们肯定能做到。您的代码通常不具有寻址地址空间上部所需的访问权限。用户模式代码在环3上运行,要访问上半部分,您需要环0访问权限。内核模式

好吧,这有点开玩笑,操作系统内核和具有环0访问权限的驱动程序通常不被认为是进程的一部分。尽管它们在逻辑上是相同的,但它们在每个进程中都映射到相同的地址。从技术上讲,当进程从环3模式切换到环0模式时,动态地映射页面是可能的,但这会使内核模式转换过于昂贵和繁琐

直观地说:由ReadFile填充的文件缓冲区可能会有一个与操作系统代码或数据块重叠的地址。最坏的情况是,它可能与文件系统驱动程序代码重叠。或者更可能是文件系统c 疼痛所需的翻页和重复复印会使阅读速度慢得出人意料。最简单的体系结构选择是将地址空间一分为二,这样就不可能有重叠,这是1992年做出的一个选择,当时没有人有钱能买得起1GB的RAM


这是一个解决了的问题,32位版本的Windows越来越少,32位进程可以在64位版本的Windows上处理4G字节。它只需要EXE头中的一个选项位,即由链接器和editbin.EXE中可用的/largeaddressware选项设置的选项位

Linux中是否存在此限制?Linux中是否存在此限制?