Можно ли предположить, что любое приложение, скомпилированное для x86, всегда будет работать под редакцией x64?

Можно ли предположить, что любое скомпилированное x86-приложение всегда будет работать под управлением x64 той же ОС, в которой оно было скомпилировано?

Насколько я знаю, для ОС Windows ответ "да". Слой эмуляции Windows x86 создан для той же цели. Но я просто хочу подтвердить это от экспертов здесь.

А как насчет Unix, Linux? Есть ли какие-либо предостережения?

2 ответа

Решение

Нет, для запуска кода x86 его необходимо запустить в режиме совместимости или в устаревшем режиме. Если ОС не поддерживает запуск процессов в режиме совместимости, скорее всего, программа не сможет работать.

Linux и IFAIK Windows в настоящее время поддерживает режим совместимости, и, похоже, многие другие поддерживают его, в большей или меньшей степени. Насколько я понимаю, NETBSD требует специального модуля для поддержки этого, поэтому не обязательно без особой тщательности поддерживать его, и это показывает, что вполне возможно, что существуют ОС, в которых возможность полностью исключена.

Кроме того, в будущем существует возможность нарушения обратной совместимости, что уже произошло на ЦП, так как виртуальный режим x86 больше не доступен в длинном режиме, то есть вы больше не можете запускать 16-битную программу под 64-битной Windows или Linux.,

Со стороны ОС может также случиться, что разработчики решат больше не поддерживать режим совместимости. Обратите внимание, что это также могло произойти, поскольку было возможно поддерживать виртуальный режим x86, сначала переключившись на устаревший режим, но, если возможно, никто, похоже, не удосужился сделать это. Точно так же ни разработчики Windows, ни Linux, похоже, не удосужились реализовать возможность запуска кода ядра в устаревшем режиме на 64-битном ядре.

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

Кроме того, поскольку это вопрос C++, вам придется задать себе вопрос, почему вы хотите сделать такое предположение? Если вы хорошо написали, ваш код должен быть скомпилирован для 64-битного режима - ведь вы не полагались на типы данных определенной ширины, не так ли?

Нет. У нас есть целая куча серверов Debian, в которых отсутствуют библиотеки Multi-Arch i386 (32 бита). В Windows Server Core WoW64 (32-битная подсистема) является необязательным. Так что как для Linux, так и для Windows существуют известные 64-битные системы, которые не будут запускать исполняемые файлы x86.

Другие вопросы по тегам