Недавно я заметил, что в 64-битной ОС Windows можно установить большинство 32-битных приложений. Но в 32-битной ОС большинство 64-битных приложений не может быть установлено. Почему это так ?
3 ответа
64-разрядные приложения скомпилированы для использования преимуществ 64-разрядных регистров в процессорах x86-64, что также требует, чтобы процессор работал в правильном режиме, и длина слова вызова API-интерфейса ОС соответствовала.
32-разрядные операционные системы обычно используют защищенный режим, который позволяет использовать только 32-разрядные регистры (например, EAX
, EBX
). На процессорах x86-64 добавлена 64-битная совместимость в длинном режиме, под которым работают 64-битные ОС.
Кроме того, 64-разрядная версия Windows включает слой совместимости WoW64, который динамически переводит 32-разрядные вызовы API в 64-разрядные эквиваленты и переключает ЦП между 32-разрядным защищенным и 64-разрядным длинным режимами, когда процесс запланирован на быть запущенным
Еще одним интересным моментом, который вступает в игру с 64-битными процессорами, является аппаратная виртуализация. При надлежащей аппаратной поддержке иногда можно запустить виртуальную машину (например, с использованием VirtualBox или VMWare), которая содержит 64-разрядную гостевую ОС, в то время как основная ОС является только 32-разрядной (опять же, учитывая наличие аппаратной виртуализации x86-64) ). Подробнее об этом с VirtualBox см. В этом разделе руководства.
Кроме того, 32-разрядное приложение может выделить только до (максимум) 4 ГБ оперативной памяти. Поскольку ограничение 64-разрядных приложений намного выше (до (максимум) 512 ГБ ОЗУ, возникнет проблема, если 64-разрядной программе потребуется выделить больше памяти). Программа зависнет, и ваш компьютер сгенерирует BSoD, заявив, что он не может выделить память.
Для 64-битного приложения требуются ресурсы, которые 32-битное приложение не может предоставить. Это все равно что поставить квадратный колышек в круглое отверстие.