百科问答小站 logo
百科问答小站 font logo



为什么大多数32位的Windows被设计成只能用4GB的内存? 第1页

  

user avatar   yue-ye-tu-xiao-xian-nu 网友的相关建议: 
      

你说的没错32位系统可以支持4G以上内存,但是问题就是稳定性。作为系统,要保证稳定,不会经常出问题,给用户带来灾难性使用体验。

svr2008有32位版本,能支持高内存,但是经常和其他驱动或者软件冲突导致蓝屏(尤其是显卡驱动,N卡和Intel集成显卡都会直接蓝屏无解)。

系统能支持高内存但是软件未必支持,软件没有适配PAE无法正常使用高位内存会导致崩溃,如果是驱动崩溃就直接蓝屏。

所以一切都以稳定为主。

我举个例子吧,很多笔记本CPU都会降低功耗使用,牺牲了部分性能,但是保证了稳定性,防止笔记本出问题频繁被用户找售后,这个道理你懂了吗?


user avatar   bei-ji-85 网友的相关建议: 
      

多少年前就有过答案,类似的问题总是被提出来,先给一个历史问题链接:

但凡说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的物理内存

参考文献:The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version

给不懂的再翻译一下:如果在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出来的内存交给硬件使用。


user avatar   pansz 网友的相关建议: 
      

其实从编程的角度,这种设计是需要严格禁止的。

换句话说:外表相似但实质表现不同的函数,我们需要把它的接口或者名称有意做得不同,避免误用。

所以:这个商品的设计师,它肯定不懂编程。

如果是我,可能会刻意的改变USB插座的位置布局,让它看起来长得不一样。——至少改变一下USB插口的颜色。

--

老插线板名义上是 5V2A 的 10W 插线板,实际上是单口输出最大2A,多口同时输出的情况下,它的实际表现大约是 5V1A,也就是苹果那个万年诟病充电头的水平。——换句话说,旧插线板的USB接口,几乎是没有什么用处的鸡肋。

新插线板,号称单口27W,多口的情况下肯定会缩水,但我猜测至少QC3.0快充是可以用的。相比旧板子应该说是从协议层面有了很大进步。一个典型的例子是接无线充电器不需要浪费充电头了。

解释一下:小米目前的无线充是 30W,需要30W的充电头,但商城只有 18W 跟 65W 的充电头出售,小米商城根本没有适配无线充的 30W 充电头。如果插这个接线板,大概能当 27W 用吧?




  

相关话题

  为什么 Linux 原生不能运行 exe 格式的文件? 
  WannaCry 勒索软件事件对微软的业务会产生正面还是负面影响? 
  程序员的工资一直这么高吗?有没有人分析一下程序员工资在不同年代的变化及未来变化趋势? 
  为什么 Linux 如此安全,却不把 Linux 设计成像 Windows 一样的图形界面来使用? 
  为什么Windows更新需要多次重启?而Linux不需要? 
  除了 Windows,macOS,类 Unix 之外还有别的选择么? 
  如何看待微软 Windows 11 中取消了右键刷新的功能又把它加了回来? 
  win10 动作录制? 
  想了解Windows CMD的语法,是不是应该看MS-DOS的书? 
  Windows 7 为什么可以挽救 Vista 的颓势?仅仅是因为改变了界面吗? 

前一个讨论
如果这个世界不能说谎,说谎就会马上死掉。那么这个社会会不会很和谐?
下一个讨论
如何可以欺骗过测谎仪?





© 2025-01-31 - tinynew.org. All Rights Reserved.
© 2025-01-31 - tinynew.org. 保留所有权利