40 votes

Lors de la compilation de code x64, quelle est la différence entre "x86_amd64" et "amd64" ?

Lors de la compilation du code avec VC++, MSDN vous donne le choix d'utiliser le jeu d'outils x86_amd64 ou le jeu d'outils amd64 (lors de l'appel de vcvarsall.bat).

Comment choisir entre les deux lors de la compilation du code x64 ? L'option amd64 produira-t-elle un code machine x64 plus efficace que le compilateur croisé ?

31voto

joshperry Points 17727

Cela n'a rien à voir avec l'efficacité. Le compilateur natif et le compilateur croisé généreront tous deux le même code machine. Vous obtiendrez cependant certains avantages en exécutant un processus de compilation native 64 bits sur une station de travail 64 bits (registres plus grands, espace mémoire plus important, etc...).

Le compilateur natif ne fonctionnera que sur une copie 64 bits de Windows, donc si votre station de travail est 32 bits, ce compilateur ne fonctionnera même pas.

Le compilateur croisé est censé fonctionner sur des machines x86 même s'il fonctionnera sur une copie 64 bits de Windows via WoW ; cependant, il n'y a aucune raison de le faire.

La page dont vous donnez le lien le dit assez bien :

x64 sur x86 (compilateur croisé x64)
Permet à de créer des fichiers de sortie pour x64. Cette version de cl.exe s'exécute comme un processus 32 bits, natif sur une machine x86 et sous WOW64 sur un système d'exploitation 64-bit Widows.

x64 sur x64
Vous permet de créer des fichiers de sortie pour x64. Cette version de cl.exe fonctionne comme un processus natif sur une machine x64 sur une machine x64.

Merci à <a href="https://stackoverflow.com/users/3153/brian-r-bondy">Brian R. Bondy </a>pour le formatage des citations

17voto

Brian R. Bondy Points 141769

D'après ce que tu as lié :

x64 sur x86 (compilateur croisé x64)
Permet à de créer des fichiers de sortie pour x64. Cette version de cl.exe s'exécute comme un processus 32 bits, natif sur une machine x86 et sous WOW64 sur un système d'exploitation 64-bit Widows.

x64 sur x64
Vous permet de créer des fichiers de sortie pour x64. Cette version de cl.exe fonctionne comme un processus natif sur une machine x64 sur une machine x64.

Paraphrasé :

Si vous utilisez x86_amd64, vous développez généralement sur une machine x86 et vous voulez créer des fichiers x64 qui s'exécutent nativement sur x64. Vous pouvez également utiliser cette option sur une machine x64, mais votre compilateur fonctionnera sous émulation WOW64.

Si vous utilisez AMD64, alors vous développez sur une machine x64 et vous voulez créer des fichiers x64 qui fonctionnent nativement sur x64. Le compilateur s'exécute nativement en x64. Cette option est plus efficace pour construire des programmes x64.

Vous pouvez vous demander pourquoi vous développeriez un programme x64 sur un ordinateur x86, puisque vous ne pouvez pas l'exécuter, vous ne pouvez pas le déboguer. Mais c'est quand même utile, par exemple si vous avez un serveur de compilation qui est x86 et que ce serveur de compilation doit générer des sorties x86 et x64.

Comment est-il possible pour un compilateur de fonctionner sous x64 s'il s'agit d'un programme basé sur x86 (x86_amd64) ? C'est la même raison pour laquelle vous pouvez exécuter n'importe quel programme x86 sur votre machine x64... Grâce à l'émulation WOW64.

Qu'est-ce que l'émulation WOW64 :

L'émulation WOW64 se produit lorsque vous exécutez un programme x86 sur un ordinateur x64 (ou IA64). WOW64 signifie Windows 32 sur Windows 64. Il s'agit d'une couche d'émulation au-dessus des machines x64 qui vous permet d'exécuter des programmes x86.

Vos opérations sur le système de fichiers seront redirigées vers les dossiers WOW64 et votre registre sera également redirigé vers un sous-nœud. Par exemple, si vous essayez d'obtenir le dossier des fichiers de programmes, vous obtiendrez le résultat suivant c:\program files (x86)\ si vous utilisez WOW64 mais il retournera c:\program files\ si vous utilisez x64.

Un autre exemple, pour le registre, si vous essayez d'écrire à HKLM\Software\Something il vous redirigera vraiment vers HKLM\SOFTWARE\Wow6432Node\Something à l'insu de votre programme x86.

L'exécution d'un build x64 natif sera plus efficace que l'exécution via l'émulation WOW64 Pourquoi ? Parce que vous n'avez pas cette couche d'émulation supplémentaire qui transforme vos appels 32 bits en appels 64 bits.

À propos, si vous utilisez la version x64 de Windows, vous pouvez voir quels processus sont en cours d'exécution par le biais de WOW64, car ils auront un *32 ajouté au nom du processus dans la liste des processus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X