目录
3.1 Program Files和Program Files (x86)
1. windows系统-32位和64位区别
区别 | 32位操作系统 | 64位操作系统 |
支持的最大运行内存不同 | 最大支持4G内存。即使装了16GB内存,剩下的内存也是浪费 | 最大支持128G内存 |
支持的软件位数不同 | 只能安装32位的软件 | 可以安装32位和64 位的软件 |
支持的CPU位数不同 | 可以安装在32位或64位CPU电脑 | 只能安装在64位CPU的电脑上 |
补充说明:
64位操作系统支持32位和64位的软件,所以在C盘目录下可以看到如下两个目录
其中Program Files (x86)是为了32位软件的。
2. CPU-32位和64位区别
CPU的位是指一次性可处理的数据量是多少,1字节=8位
32位处理器可以一次性处理4个字节的数据量。依次类推,64位处理器可以一次性处理8个字节的数据量,比32位处理器的处理速率加快一倍
区别 | 32位CPU | 64位CPU |
一次处理的数据量大小 | 一次性处理32位(4个字节)的数据量 | 一次性处理64位(8个字节)的数据量 |
支持的操作系统位数不同 | 只支持32位操作系统 | 支持32位和63位的操作系统 |
解释说明:
① 为什么支持的操作系统位数不同?
如果一个机器指令是32位的,那么32位的操作系统和64位操作系统都可以取出并执行这个机器指令;
如果一个机器指令是64位的,那么32位的操作系统是无法执行这个指令的,只有64位的操作系统可以执行这个指令;
所以,32位的CPU只能支持32位的操作系统,而64位的CPU可以支持两者。
② 为什么64位CPU比32位CPU快
如果一个机器指令是32位的,那么32位寄存器一次只能取出一个指令来执行,而64位寄存器就可以一次取两个指令来执行。也就相当于一个小孩和一个大人抢东西吃,小孩一次只能拿1个吃,而大人则可以拿2个吃。
3. Windows下32位和64位
3.1 Program Files和Program Files (x86)
科普知识:Windows下的Program Files (x86)文件夹是干什么的?_windows_Windows系列_操作系统_脚本之家
在装好64位的Windows之后,能在系统盘(通常是C盘)下看到如上文件夹,那这个带”x86″的文件夹和不带”x86″的有什么区别呢?
简单来说:Program Files (x86)存放了一些32位的系统文件。它和正常的Program Files以及Windows文件夹一样,都属于系统文件夹,请勿随意改动。
64位Windows中提供了一种技术:Windows on Windows 64(即WoW64)。它可以使32位的应用程序正常地运行在64位的Windows中,这样用户在从32位到64位过渡的过程中,不会感受到很大的不便。
为了能让32位的程序正常运行,64位的Windows中自带了一大部分的32位的系统文件。当32位程序运行的时候,系统会给它虚拟出一个32位的环境,这样32位程序会以为自己运行在32位Windows中。
Windows的系统文件主要是存放在%SystemDrive%\Program Files和%Windir%\System32中(即通常的C:\Program Files和C:\Windows\System32)。64位系统中,这两个文件夹存放的是64位的系统文件。
为了存放32位的同名系统文件,64位系统中有另外两个文件夹与之对应,%SystemDrive%\Program Files (86)和%Windir%\SysWoW64(即通常的C:\Program Files (86)和C:\Windows\SysWoW64)。
当32位程序需要访问Program Files或者System32中的文件时,系统会自动转向到Program Files (x86)或者SysWoW64中。这样32位的程序就可以正常的在64位Windows中运行了。
类似的情况也发生在应用程序安装的时候,64位的程序一般都会被安装到Program Files中,而32位的程序则是装在Program Files (x86)中。
从64位系统的角度来说,WoW64只是提供了兼容32位程序的方法,而系统本身则完全是64位的。所以把Program Files (x86)和SysWoW64这两个文件夹删除,并不会影响系统的正常运行,但是这种做法是非常不推荐的。
总结:
64位程序:
- C:\Windows\System32
- C:\Program Files
32位程序:
- C:\Windows\SysWOW64
- C:\Program Files (x86)
3.2 Windows下神奇的SysNative文件夹
其实%WINDIR%\SysNative文件夹是不存在的,它只是64位Windows系统提供的一种重定向机制。
本文3.1中,我们已经知道64位Windows通过System32和SysWoW64两件文件夹来区分64位和32位的系统文件,当32位的应用程序尝试访问System32文件夹的时候,系统会自动把它转到SysWoW64文件夹,这样32位应用程序在32位系统和64位系统就都可以运行了,
这样就出现了一个问题,32位的应用程序怎么访问真正的System32文件夹呢,即存放64位系统文件的文件夹?答案就是通过SysNative文件夹。这个文件夹并不存在,即在资源管理器中找不到,但当32位的应用程序尝试访问这个文件夹时,64位的Windows会把它重定向到真正的System32文件夹,从而提供了一种让32位应用程序访问64位系统文件的方法。
总结:
- System32文件夹包含64位DLL文件
- SysWOW64包含32位DLL文件
Sysnative是一个重定向文件夹,允许32位程序访问64位目录。
3.3 注册表的32位和64位
在windows注册表中,同样存在于本文3.1中所述相同的重定向机制。
假设在64位系统下访问HKEY_LOCAL_MACHINE\SOFTWARE\Test\MyAPP\1.0这个注册表路径:
- 32位程序会自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Test\MyAPP\1.0这个注册表路径。
- 64位程序正常访问HKEY_LOCAL_MACHINE\SOFTWARE\Test\MyAPP\1.0这个注册表路径。
那么32位程序如何正常在64位系统上访问HKEY_LOCAL_MACHINE\SOFTWARE\Test\MyAPP\1.0这个注册表路径呢?关键在于RegOpenKeyEx这个API。函数原型如下:
RegOpenKeyEx(
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_In_opt_ DWORD ulOptions,
_In_ REGSAM samDesired,
_Out_ PHKEY phkResult
);
在64位系统下:
① 假设64位程序要访问HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Test\MyAPP\1.0这个注册表路径,则:
RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_ALL_ACCESS | KEY_WOW64_32KEY, &hkey);
② 假设32位程序要访问HKEY_LOCAL_MACHINE\SOFTWARE\Test\MyAPP\1.0这个注册表路径,则:
RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkey);