При компиляции кода x64 В чем разница между «x86_amd64» и «amd64»?

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

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

31
задан Meta 18 August 2010 в 01:01
поделиться

2 ответа

Это не имеет ничего общего с эффективностью. Собственный компилятор и кросс-компилятор будут генерировать один и тот же машинный код. Однако вы получите некоторые преимущества, запустив собственный процесс 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 машина.

Спасибо Брайану Р. Бонди за форматирование цитаты

25
ответ дан 27 November 2019 в 22:40
поделиться

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

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-битные.

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

11
ответ дан 27 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: