x64 winsdk visual studio net microsoft framework descargar visual-c++ visual-studio-2010 compiler-construction 64bit

visual c++ - winsdk - Al compilar el código x64, ¿cuál es la diferencia entre "x86_amd64" y "amd64"?



visual studio express descargar (2)

Al compilar el código con VC ++, MSDN le ofrece la opción entre usar el conjunto de herramientas x86_amd64 o el conjunto de herramientas amd64 (al llamar a vcvarsall.bat).

¿Cómo elijo entre esos dos cuando compilo el código x64? ¿La opción amd64 generará un código de máquina x64 más eficiente que el compilador cruzado?


No tiene nada que ver con la eficiencia. El compilador nativo y el compilador cruzado generarán el mismo código de máquina. Sin embargo, obtendrá algunos beneficios al ejecutar un proceso de compilación nativo de 64 bits en una estación de trabajo de 64 bits (registros más grandes, espacio de memoria más grande, etc.).

El compilador nativo solo se ejecutará en una copia de 64 bits de Windows, por lo que si su estación de trabajo es de 32 bits, este compilador ni siquiera se ejecutará.

El compilador cruzado está destinado a ejecutarse en máquinas x86 aunque se ejecutará en una copia de 64 bits de Windows a través de WoW; sin embargo, no hay razón para hacer esto.

La página que enlazas lo dice bastante bien:

x64 en x86 (compilador cruzado x64)
Le permite crear archivos de salida para x64. Esta versión de cl.exe se ejecuta como un proceso de 32 bits, nativo en una máquina x86 y bajo WOW64 en un sistema operativo Widows de 64 bits.

x64 en x64
Le permite crear archivos de salida para x64. Esta versión de cl.exe se ejecuta como un proceso nativo en una máquina x64.

Gracias a Brian R. Bondy por el formato de citas


De lo que vinculó:

x64 en x86 (compilador cruzado x64)
Le permite crear archivos de salida para x64. Esta versión de cl.exe se ejecuta como un proceso de 32 bits, nativo en una máquina x86 y bajo WOW64 en un sistema operativo Widows de 64 bits.

x64 en x64
Le permite crear archivos de salida para x64. Esta versión de cl.exe se ejecuta como un proceso nativo en una máquina x64.

Parafraseado

Si usa x86_amd64, entonces normalmente está desarrollando en una máquina x86 y desea crear archivos x64 que se ejecuten nativamente en x64. También puede usar esta opción en una máquina x64, pero su compilador se ejecutará con la emulación WOW64.

Si usa AMD64, está desarrollando en un equipo x64 y desea crear archivos x64 que se ejecuten de forma nativa en x64. El compilador se ejecuta de forma nativa en x64. Esta opción es más eficiente para construir programas x64.

Puede preguntarse por qué alguna vez desarrollaría un programa x64 en una computadora x86, ya que no puede ejecutarlo, no puede depurarlo. Bueno, sigue siendo útil, por ejemplo, si tiene un servidor de compilación que es x86 y ese servidor de compilación necesita generar salidas x86 y x64.

¿Cómo es posible que un compilador se ejecute en x64 si es un programa basado en x86 (x86_amd64)? Esa es la misma razón por la que puede ejecutar cualquier programa x86 en su máquina x64 ... Gracias a la emulación WOW64.

¿Qué es la emulación WOW64?

La emulación WOW64 ocurre cuando ejecuta un programa x86 en una computadora x64 (o IA64). WOW64 significa Windows 32 en Windows 64. Es una capa de emulación sobre las máquinas x64 que le permite ejecutar programas x86.

Las operaciones del sistema de archivos se redirigirán a las carpetas WOW64 y su registro también se redirigirá a un subnodo. Por ejemplo, cuando intenta obtener la carpeta de archivos de programa, devolverá c:/program files (x86)/ si está utilizando WOW64, pero devolverá c:/program files/ si está utilizando x64.

Otro ejemplo para el registro, si intentas escribir en HKLM/Software/Something , realmente te redirigirá a HKLM/SOFTWARE/Wow6432Node/Something sin el conocimiento de tu programa x86.

Ejecutar una compilación x64 nativa será más eficiente que ejecutar a través de la emulación WOW64 ¿Por qué? Porque no tienes esa capa de emulación extra para transformar tus llamadas de 32 bits en las de 64 bits.

Por cierto, si está ejecutando la versión x64 de Windows, puede ver qué procesos se están ejecutando a través de WOW64, ya que tendrán un * 32 agregado al nombre del proceso en la lista de procesos.