32位和64位

目录

1. windows系统-32位和64位区别

2. CPU-32位和64位区别

3. Windows下32位和64位

3.1 Program Files和Program Files (x86)

3.2 Windows下神奇的SysNative文件夹

3.3 注册表的32位和64位


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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值