Почему 64-разрядная версия Windows больше, чем 32-разрядная версия?

Ответы:

77

Существует несколько причин несоответствия размеров:

  1. 64-разрядная версия Windows содержит слой перевода (32-разрядная версия Windows на 64-разрядной версии Windows или WoW64 "), что позволяет запускать 32-битное программное обеспечение.
  2. 64-разрядная версия Windows также содержит 32-разрядные версии различных программ (Internet Explorer) и библиотек (в папке WinSxS). Как отмечается в комментариях, это является наиболее существенной причиной разницы в размерах.
  3. 64-разрядные адреса памяти в два раза длиннее 32-разрядных адресов памяти, поэтому 64-разрядные указатели также в два раза длиннее. 64-битные программы, которые интенсивно используют указатели, будут заметно больше, чем их 32-битные аналоги.

Первая и последняя причины не дают такой большой вклад, как 32-битное программное обеспечение, которое поставляется с 64-битной Windows - но для полноты картины они должен быть принятым во внимание.

rob
источник
4
в основном это связано с точкой 1: sxs папка внутри .iso - 177 м для 32-битной, 315 м - для 64-битной. windows папка внутри install.wim внутри iso 7,9 г для 32-битных, 11,9 г для 64-битных. и внутри этой папки у нас снова WinSxS что составляет 3,9 г для 32-разрядных и 6,9 г для 64-разрядных. параллельные компоненты - это самый большой кусок данных здесь, и они есть как для 32-битных, так и для 64-битных приложений в 64-битной версии Windows. наличие больших двоичных файлов и некоторых двойных версий приложений практически не влияет на размер iso.
akira
26
Я не вижу, как точка 3 повлияет на размер изображения. Очень мало значений указателей жестко запрограммированы в исходном коде. Только они занимают место в двоичном файле программного обеспечения (а не образ ОЗУ после запуска программного обеспечения).
Konrad Rudolph
10
Для (1) все Wow64 .DLL занимают менее 1 МБ на моей установке Win7 Pro. Для (3) @KonradRudolph является правильным. Нет никакой реальной причины, по которой внутреннее раздувание кода переходит с 32-разрядного на 64-разрядный режим - изменилось несколько операционных кодов, хотя большинство из них по-прежнему имеют ширину всего 32-разрядного кода (x86 - это архитектура команд переменной длины). Большая часть этого несоответствия возникает из (2).
Breakthrough
3
@akira The sxs Папка имеет отношение к (2), а не (1). Параллельные сборки не являются частью WoW64, хотя выполняются 32-битные DLL под WoW64. Тем не менее, папка WinSxS есть обеспечить 32-битные и 64-битные двоичные файлы для программ которые требуют соответствующей DLL - по существу, имеют как 32-битную, так и 64-битную версию DLL.
Breakthrough
3
@CrisStringfellow: никто не сомневался в этом. но эффект на общий размер ISO-изображений почти ноль. основной кусок увеличения размера вызван доставкой 64-битных и 32-битных файлов (некоторые приложения, много dll [в основном находятся внутри WinSxS папка в .iso]).
akira
11

В 64-битных версиях Microsoft развертывает дополнительное программное обеспечение. Например, есть две версии Internet Explorer (64 и 32 бита). Другим примером является вся система времени выполнения для Win32-приложения ,
Кроме того, двоичный код получит больше , Вероятно, сумма этого имеет большое значение.

HCL
источник
2

64-битные версии, как правило, больше, чем 32-битные, по нескольким причинам.

Первое, что нужно учитывать, - это тип компилятора и среда выполнения, в которой выполняется программное обеспечение. Если программное обеспечение построено с помощью компилятора, который создает собственный код и работает без среды выполнения, можно увидеть небольшие различия в размере сгенерированного кода, что связано с большим набором команд в процессорах CISC.

Во-вторых, если программное обеспечение скомпилировано для работы в среде выполнения, такой как .NET, вы не увидите никаких различий в размерах, поскольку компилятор генерирует тот же (промежуточный) код.

Наконец, 64-разрядная версия Windows содержит полную 64-разрядную версию с некоторыми из 32-разрядных версий. Это необходимо, поскольку некоторые программы являются 32-разрядными и должны работать без изменений в 64-разрядной версии Windows.

Chris Mylonas
источник