Можно ли предположить, что любой скомпилированное приложение x86 будет всегда бегать под x64 редакцией той же ОС приложение было скомпилировано в?
Насколько я знаю, для ОС Windows ответ «Да». Слой эмуляции Windows x86 построен для той же цели. Но я просто хочу подтверждать это от экспертов здесь.
Как насчет Юникс, Linux? Есть ли предостережений?
Нет, для запуска кода 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.