AMD64 работает на i586 или наоборот? - PullRequest
0 голосов
/ 31 марта 2011

У меня есть небольшая программа на C, которую я хочу портировать с Linux на Windows. Я могу сделать это с помощью компилятора MinGW, и я заметил, что он имеет два разных префикса, amd64 и i586. Я нахожусь на компьютере i686, и мне было интересно, скомпилирую ли я свою программу на C с использованием архитектуры amd64, будет ли она работать на моей машине i686? И наоборот?
UPDATE:
Есть ли компилятор, который компилирует код C для запуска на ЛЮБОЙ архитектуре?

1 Ответ

6 голосов
/ 31 марта 2011

Если вы скомпилируете свой код для i586 (на самом деле то, что обычно называется x86), он должен нормально работать на процессорах AMD64 (x86-64), поскольку процессоры x86-64 могут выполнять «устаревший» 32-битный код, пока ОСподдерживает это - и обычные ОС обычно делают;В частности, поддержка Windows для 32-битных приложений действительно хороша, так как большинство приложений, установленных в средней системе Windows, все еще 32-битные.

Вместо этого не выполняется, поскольку набор инструкций x86-64 (свободно)говоря) расширение архитектуры x86, поэтому любой не 64-битный процессор x86 не будет знать, как интерпретировать новый машинный код (и даже если бы он знал, у него не было бы ресурсов для его запуска).

Что касается редактирования, вы не можете сгенерировать машинный код, который запускается везде;обычное решение в таких случаях заключается в использовании псевдоскомпилированных языков, которые выводят машинный код промежуточного уровня, для работы которого требуется установленная для конкретной архитектуры виртуальная машина (классический пример здесь - Java и .NET).Если вместо этого вы используете язык, скомпилированный для «нативного кода», вы должны сгенерировать исполняемый файл для каждой целевой платформы.

...