你说的没错32位系统可以支持4G以上内存,但是问题就是稳定性。作为系统,要保证稳定,不会经常出问题,给用户带来灾难性使用体验。
svr2008有32位版本,能支持高内存,但是经常和其他驱动或者软件冲突导致蓝屏(尤其是显卡驱动,N卡和Intel集成显卡都会直接蓝屏无解)。
系统能支持高内存但是软件未必支持,软件没有适配PAE无法正常使用高位内存会导致崩溃,如果是驱动崩溃就直接蓝屏。
所以一切都以稳定为主。
我举个例子吧,很多笔记本CPU都会降低功耗使用,牺牲了部分性能,但是保证了稳定性,防止笔记本出问题频繁被用户找售后,这个道理你懂了吗?
多少年前就有过答案,类似的问题总是被提出来,先给一个历史问题链接:
但凡说PAE的,都没说到关键点上。还有人说因为32位所以最大内存只有2^32=4G,这简直错的离谱,寄存器宽度和寻址范围毫无关系。DOS在实模式下寄存器只有16位,最大范围是64KB,但寻址范围可以到1MB。
寻址范围跟地址线有宽度有关,Intel 32位CPU早在1995年就支持36位地址线了。1995年,那可是Windows 95的时代,所以别再提32位地址线只有32位的说法了,都什么年代的事情了。
32位Windows本来就是支持PAE的,PAE也允许硬件访问4G以上的内存,所以问题的根本不在于PAE,而在于Windows的限制。
从以上回答中复制一部分关键的内容过来:
几个结论:
1、PAE允许操作系统在32位模式下使用大于4G的物理内存。
2、不管是否使用PAE,对于单个进程而言,32位系统下可见的地址空间最大只有4G。
3、PAE的优势是可以让不同的进程(在不同的地址空间里)累计使用大于4G的内存,因此而达到使用超过4G内存的目的。
4、32位Windows系列虽然支持PAE,但实际在使用中最大内存限制在了4G,是人为限制的,原因后面给分析(楼上给出的各种理由都不成立,这里是有技术原因的)。
5、Linux则在开启PAE的模式下能支持在32位系统中使用超过4G的内存。
6、Windows Server版32位允许使用超过4G的物理内存
给不懂的再翻译一下:如果在32位Windows中使用超过4G内存,会影响驱动的DMA,容易导致程序崩溃或者蓝屏,所以为了保持兼容性,XP不允许使用超过4G内存(详细解释见引用的回答),Server版因为一开始就与普通版不兼容,所以不存在兼容性的问题。
所以,不要拿一堆公式来堆砌回答,根本没答到点子上,2^32 = 4G这种公式谁都会。
Windows XP时代,有非官方的人做过XP 4G的补丁,但非常不稳定。
关于DMA 4G的问题,这里多说一下:
很多硬件,尤其是老硬件,做DMA的时候,要求内存物理地址必须是4G以下的,否则硬件可能会访问不到内存,因为硬件自身的地址线是32位的。所以配套的驱动也需要在做DMA时,申请4G以下的内存空间。
微软在这方面偷懒,32位环境下,默认所有的内存都是可以DMA的,默认所有内存都是4G以下的,这样做很省事,驱动不需要判断申请的物理内存地址,直接用就是了。但这就把驱动的工作范围限定在4G以下了。而大多数驱动不会主动检查物理地址范围,这就导致一旦物理地址超范围,驱动肯定崩。解决的办法也很简单,就是改驱动,但问题是很多驱动都不是微软写的,而是第三方的,甚至连数字签名也没有,微软显然没有能力推动厂商做这个事情,后果就是微软不得不把32位Windows的桌面版本,限定在4G内存以内工作。
如果做过非x86驱动的人应该了解,在某些平台上(PPC/ARM/MIPS)并非所有的内存都可以做DMA,写驱动的时候必须万分小心,不能直接把malloc出来的内存交给硬件使用。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有