为什么Windows的64位版本大于32位版本?


Answers:


77

大小差异有几个原因:

  1. 64位Windows包含一个转换层(在Windows 64位上为Windows 32位,或“ WoW64 ”),它可以运行32位软件。
  2. 64位Windows还包含32位版本的各种程序(Internet Explorer)和库(在WinSxS文件夹中)。如评论中所述,这是造成大小差异的最重要原因。
  3. 64位存储器地址的长度是32位存储器地址的两倍,因此64位指针的长度也是其两倍。大量使用指针的64位程序将明显大于其32位程序。

第一个和最后一个原因所起的作用几乎不及64位Windows附带的32位软件-但为完整起见,考虑它们。


4
它的主要作用点是:sxs.iso中的文件夹对于32位是177m,对于64位是315m。iso windows内部的文件夹install.wim对于32位是7.9g,对于64位是11.9g。在该文件夹中,我们又有WinSxS一个32位的3.9g和64位的6.9g。并排的东西是这里最大的数据块,在64位版本的Windows中,对于32位和64位应用程序都存在。具有更大的二进制文件和某些双重版本的应用程序几乎不会影响isos的大小。
akira 2012年

26
我看不到第3点如何影响图像尺寸。很少有指针值被硬编码到源代码中。只有那些会占用软件二进制文件中的空间(而不是运行软件后的RAM映像)。
Konrad Rudolph'3

10
对于(1),在我的Win7 Pro安装上,所有Wow64 .DLL占用的内存不到1MB。对于(3),@ KonradRudolph是正确的。没有内在的代码膨胀从32位迁移到64位的真正原因-更改了一些操作码,尽管大多数操作码仍然只有32位宽(x86是可变长度指令体系结构)。 这种差异的大部分来自(2)。
突破

3
@akira该sxs文件夹与(2),而不是(1)有关。尽管32位DLL是 WoW64 执行的,但并行程序集不是WoW64的一部分。但是,WinSxS文件夹可以需要相应DLL的程序提供32位和64位二进制文​​件 -本质上具有DLL的32位和64位版本。
突破

3
@CrisStringfellow:没有人对此表示怀疑。但是对iso映像的整体大小的影响几乎为零。大小增加的主要部分是由交付64位和32位的东西(某些应用程序,很多dll [主要WinSxS在.iso 的文件夹内找到)引起的。
akira 2012年

11

在64位版本中,Microsoft部署其他软件。例如,有两个版本的Internet Explorer(64位和32位)。另一个示例是Win32应用程序的整个运行时系统。
而且,二进制代码将变得更大。这些总和可能会带来很大的不同。


2

由于以下两个原因,通常64位版本要比32位版本大。

首先要考虑的是编译器的类型和执行软件的运行时环境。如果该软件是使用生成本机代码的编译器构建的,并且在没有运行时环境的情况下运行,则可能会看到生成的代码大小存在细微差异,这与CISC处理器中的较大指令集有关。

其次,如果将软件编译为在.NET等运行时环境下运行,您将看不到任何大小差异,因为编译器会生成相同的(中间)代码。

最后,Windows的64位版本包含完整的64位版本以及某些32位版本的对应版本。这是必需的,因为某些软件是32位的,并且需要在Windows 64位中运行而无需修改即可运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.