Подтвердить что ты не робот

При компиляции кода x64, какая разница между "x86_amd64" и "amd64"?

При компиляции кода с VС++ MSDN дает вам возможность использовать набор инструментов x86_amd64 или набор инструментов amd64 (при вызове vcvarsall.bat).

Как выбрать между этими двумя при компиляции кода x64? Будет ли вариант amd64 более эффективный машинный код x64, чем кросс-компилятор?

4b9b3361

Ответ 1

Это не имеет ничего общего с эффективностью. Собственный и кросс-компилятор будет генерировать один и тот же машинный код. Однако вы получите некоторые преимущества, запустив собственный 64-битный процесс компилятора на 64-разрядной рабочей станции (более крупные регистры, большее пространство памяти и т.д.).

Собственный компилятор будет работать только на 64-битной копии Windows, поэтому, если ваша рабочая станция 32-разрядная, этот компилятор даже не запустится.

Кросс-компилятор предназначен для работы на компьютерах x86, хотя он будет работать на 64-битной копии Windows через WoW; однако для этого нет оснований.

Ссылка на ссылку говорит об этом довольно хорошо:

x64 на x86 (кросс-компилятор x64)
Позволяет вы создаете выходные файлы для x64. Эта версия cl.exe работает как 32-битный процесс, родной на x86 машины и под WOW64 на 64-битной Операционная система Widows.

x64 на x64
Позволяет создавать выходные данные. файлы для x64. Эта версия cl.exe выполняется как собственный процесс на x64 машина.

Благодаря Брайан Р. Бонди для форматирования цитаты

Ответ 2

От того, что вы связали:

x64 на x86 (кросс-компилятор x64)
Позволяет вы создаете выходные файлы для x64. Эта версия cl.exe работает как 32-битный процесс, родной на x86 машины и под WOW64 на 64-битной Операционная система Widows.

x64 на x64
Позволяет создавать выходные данные. файлы для x64. Эта версия cl.exe выполняется как собственный процесс на x64 машина.

Парафраз:

Если вы используете x86_amd64, вы обычно разрабатываете на машине x86 и хотите создать x64 файлы, которые запускаются изначально на x64. Вы также можете использовать эту опцию на машине x64, но ваш компилятор будет работать под эмуляцией WOW64.

Если вы используете AMD64, то вы разрабатываете на машине x64, и вы хотите создать x64 файлы, которые запускаются изначально на x64. Компилятор запускается изначально на x64. Эта опция более эффективна для создания x64-программ.

Вы можете задаться вопросом, почему вы когда-либо разрабатывали x64-программу на компьютере x86, так как вы не можете ее запустить, вы не можете ее отладить. Ну, это еще полезно, например, если у вас есть сервер сборки, который является x86, и сервер сборки должен генерировать как выходы x86, так и x64.

Как возможно, чтобы компилятор работал под x64, если это программа на основе x86 (x86_amd64)? По той же причине вы можете запускать любую программу x86 на вашей машине x64... Благодаря эмуляции WOW64.

Что такое эмуляция WOW64:

Эмуляция WOW64 происходит при запуске x86-программы на компьютере x64 (или IA64). WOW64 означает Windows 32 в Windows 64. Это слой эмуляции поверх x64 машин, которые позволяют выполнять программы x86.

Операции с файловой системой будут перенаправлены в папки WOW64, и ваш реестр также будет перенаправлен на поднос. Например, когда вы пытаетесь получить папку для файлов программы, она вернет c:\program files (x86)\, если вы используете WOW64, но она вернет c:\program files\, если вы используете x64.

Другой пример: для реестра, если вы попытаетесь написать HKLM\Software\Something, он действительно перенаправит вас на HKLM\SOFTWARE\Wow6432Node\Something без вашего знания о программе x86.

Запуск собственной сборки x64 будет более эффективным, чем запуск эмуляции WOW64. Почему? Поскольку у вас нет этого дополнительного уровня эмуляции для преобразования ваших 32-битных вызовов в 64-битные.

Кстати, если вы используете x64-версию Windows, вы можете видеть, какие процессы выполняются через WOW64, потому что в списке процессов будет добавлено * 32 к имени процесса.