百科问答小站 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 用吧?




  

相关话题

  为什么大多数32位的Windows被设计成只能用4GB的内存? 
  为何音乐的在线播放要在硬盘缓存文件,下载到运存播放不就行了,还增强性能减少磁盘损耗,也没缓存关闭选项? 
  64位操作系统,进行64位数运算,比32位操作系统快吗? 
  蒸汽平台(Steam)壁纸引擎(Wallpaper Engine) 创意工坊中有哪些值得推荐的壁纸? 
  虚拟机装 Linux 我还能理解,装 Windows 有什么用? 
  为什么大多数32位的Windows被设计成只能用4GB的内存? 
  为什么不少医院还在使用已经被淘汰 Windows XP 系统,不怕患者资料被泄露吗? 
  为什么微软的软件安装都如此麻烦? 
  64位操作系统,进行64位数运算,比32位操作系统快吗? 
  为什么在 HTTP 协议中,使用的是 Windows 换行方式而不是 UNIX 换行方式? 

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





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利