这里纠正前几个回答中的错误:
- 32位系统可以兼容4g以上内存(通过PAE,最多支持64GB),但是微软不允许桌面版Windows使用该特性(所以有一些第三方软件可以破解,因为它们是在硬件支持PAE的前提下禁止Windows内核读取许可证中的内存限制数值)
- 64位系统可以向下兼容32位程序,但64位系统无法打开16位程序。(因为CPU在Long Mode下不能进入V8086模式,所以64位Windows没有NTVDM)
- 现在的笔记本都是预装64位系统的原因是UEFI+Secure Boot(微软规定所有OEM在预装系统时必须开启)。UEFI严格区分体系结构(是因为UEFI固件本身的架构是固定的),Secure Boot防止用户更改系统(通过机械的密钥对码)。用户如果有运行16位程序等需求运行32位Windows,首先需要禁用Secure Boot并且清除主板中的Secure Boot密钥,然后开启CSM并将引导模式设为Legacy,最后格式化硬盘安装Windows
关于用户Weasley Frank的回答,本人说明如下:
虽然PAE可以允许系统识别并使用最多64GB的物理内存,但是这并非可以说明程序可以任意使用这些内存。
我们都知道,Windows是一个多任务操作系统,它允许多个任务同时运行。如果进程可以无限使用任意内存,就很容易出现个别进程占用大量物理内存导致其他进程内存不足,严重时甚至会导致系统崩溃。因此,为保证系统的稳定运行,操作系统必须对进程的可用内存做出一定的限制。
在Windows NT和Linux等现代操作系统中,这一限制是通过虚拟地址进行的。每个进程都有一个独立的虚拟地址空间,进程先访问虚拟地址,再映射到对应的物理地址。在Windows和Linux中,每个进程的虚拟地址空间为4GB。然而这些空间却不能全部被应用程序的进程使用,操作系统的内核必须保留一部分空间,剩余的空间才可以被进程使用。在Windows中,内核占用2GB的虚拟地址,剩余的2GB归进程使用;在Linux中,内核占用1GB的虚拟地址,剩余的3GB归进程使用。不过这个分配比例是可以修改的,如Windows XP通过boot.ini中添加/3GB参数,Windows Vista及以后版本通过bcdedit /set IncreaseUserVa 3072 命令都可以把进程占用的空间扩大为3GB。但是这样做是不推荐的,因为这样会压缩内核占用的虚拟地址,可能导致系统不稳定。
对于那些确有必要使用较大内存的应用程序,可以采用多个进程同时运行解决该问题。对那些确有单个进程占用大量内存的必要的程序,它们是通过AWE来使用大于4GB的虚拟地址空间的。AWE允许应用程序获取物理内存,然后将非分页内存的视图动态映射到虚拟地址空间。具体原理如图:
所以说,绝大多数普通程序都不具有AWE适配,因为它们不需要这个;而且这可以减少一般程序的开发成本。只有那些像虚拟机那样的特殊程序,才考虑了AWE的问题。
来源:知乎 www.zhihu.com
作者:知乎用户(登录查看详情)
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载
此问题还有 21 个回答,查看全部。
延伸阅读:
2019年了,笔记本都是预装64位的系统吗?
4g内存的笔记本想换win10系统,用32位和64位哪个更流畅些?