Warum ist die 64-Bit-Version von Windows größer als die 32-Bit-Version?

56

Der Größenunterschied für die Windows 8 Consumer Preview-ISO-Images zwischen der 64-Bit- und der 32-Bit-Version beträgt 800 MB oder 24% .

Ich habe noch nie einen so großen Unterschied gesehen.

Warum gibt es so einen großen Unterschied?

wizlog
quelle

Antworten:

77

Es gibt mehrere Gründe für die Größenabweichung:

  1. 64-Bit-Windows enthält eine Übersetzungsebene (Windows 32-Bit unter Windows 64-Bit oder " WoW64 "), mit der 32-Bit-Software ausgeführt werden kann.
  2. 64-Bit-Windows enthält auch 32-Bit-Versionen verschiedener Programme (Internet Explorer) und Bibliotheken (im Ordner WinSxS). Wie in den Kommentaren erwähnt, ist dies der wichtigste Grund für den Größenunterschied.
  3. 64-Bit-Speicheradressen sind doppelt so lang wie 32-Bit-Speicheradressen, daher sind 64-Bit-Zeiger auch doppelt so lang. 64-Bit-Programme, die häufig Zeiger verwenden, sind deutlich größer als ihre 32-Bit-Gegenstücke.

Der erste und der letzte Grund tragen nicht annähernd so viel zu der 32-Bit-Software bei, die mit 64-Bit-Windows geliefert wird. Der Vollständigkeit halber sollten sie jedoch berücksichtigt werden.

rauben
quelle
4
Der sxsHauptgrund hierfür ist Punkt 1: Der Ordner in der .iso-Datei ist 177 m für 32-Bit-Dateien, 315 m für 64-Bit-Dateien. Der windowsOrdner im install.wimInneren der ISO ist 7,9 g für 32-Bit, 11,9 g für 64-Bit. und in diesem Ordner haben wir wieder WinSxS3.9g für 32bit und 6.9g für 64bit. Das Side-by-Side-Material ist der größte Datenblock hier und in der 64-Bit-Version von Windows sowohl für 32-Bit- als auch für 64-Bit-Apps verfügbar. Größere Binärdateien und einige doppelte Versionen von Anwendungen haben fast keinen Einfluss auf die Größe der Isos.
Akira
26
Ich sehe keinen Einfluss von Punkt 3 auf die Bildgröße. Sehr wenige Zeigerwerte sind im Quellcode fest codiert. Nur diese würden Platz in der Software-Binärdatei belegen (und nicht das RAM-Image, sobald die Software ausgeführt wird).
Konrad Rudolph
10
Für (1) belegen alle Wow64-DLLs weniger als 1 MB in meiner Win7 Pro-Installation. Für (3) ist @KonradRudolph richtig. Es gibt keinen wahren Grund dafür, dass sich der eigentliche Code von 32 auf 64-Bit aufbläht - einige Opcodes wurden geändert, obwohl die meisten immer noch nur 32 Bit breit sind (x86 ist eine Befehlsarchitektur mit variabler Länge). Der größte Teil dieser Diskrepanz ergibt sich aus (2).
Durchbruch
3
@akira Der sxsOrdner hat mit (2) zu tun, nicht mit (1). Die Side-by-Side-Assemblys sind nicht Teil von WoW64, obwohl die 32-Bit-DLLs unter WoW64 ausgeführt werden. Der Ordner WinSxS bietet jedoch 32-Bit- und 64-Bit-Binärdateien für Programme , für die die entsprechende DLL erforderlich ist - im Wesentlichen mit einer 32-Bit- und einer 64-Bit-Version der DLL.
Durchbruch
3
@CrisStringfellow: Niemand hat daran gezweifelt. Der Effekt auf die Gesamtgröße der ISO-Bilder ist jedoch nahezu gleich Null. Der Hauptteil der Vergrößerung wird durch die Bereitstellung von 64-Bit- UND 32-Bit-Inhalten verursacht (einige Apps, viele DLLs [meistens im WinSxSOrdner in der .iso- Datei enthalten ]).
Akira
11

In 64-Bit-Versionen stellt Microsoft zusätzliche Software bereit. Beispielsweise gibt es zwei Versionen von Internet Explorer (64 und 32 Bit). Ein weiteres Beispiel ist das gesamte Laufzeitsystem für Win32-Anwendungen .
Außerdem wird der Binärcode größer . Wahrscheinlich macht die Summe dieser Faktoren den großen Unterschied.

HCL
quelle
2

64-Bit-Versionen sind in der Regel aus mehreren Gründen größer als 32-Bit-Versionen.

Das erste, was zu berücksichtigen ist, ist der Typ des Compilers und die Laufzeitumgebung, in der die Software ausgeführt wird. Wenn die Software mit einem Compiler erstellt wurde, der systemeigenen Code erzeugt und ohne Laufzeitumgebung ausgeführt wird, können geringfügige Unterschiede in der generierten Codegröße festgestellt werden, die mit einem größeren Befehlssatz in CISC-Prozessoren zusammenhängen.

Zweitens werden beim Kompilieren der Software zur Ausführung in einer Laufzeitumgebung wie .NET keine Größenunterschiede festgestellt, da der Compiler denselben (Zwischen-) Code generiert.

Schließlich enthält die 64-Bit-Version von Windows die vollständige 64-Bit-Version mit einigen der 32-Bit-Versionsgegenstücke. Dies ist erforderlich, da manche Software 32-Bit ist und unter Windows 64-Bit ohne Änderungen ausgeführt werden muss.

Chris Mylonas
quelle