2010-08-18 10 views

risposta

22

Non ha nulla a che fare con l'efficienza. Il nativo e il cross-compilatore genereranno entrambi lo stesso codice macchina. Otterrete comunque alcuni vantaggi eseguendo un processo di compilazione nativo a 64 bit su una workstation a 64 bit (registri più grandi, spazio di memoria più grande, ecc ...).

Il compilatore nativo verrà eseguito solo su una copia a 64 bit di Windows, quindi se la workstation è a 32 bit, questo compilatore non verrà nemmeno eseguito.

Il cross-compiler è pensato per funzionare su macchine x86 anche se verrà eseguito su una copia a 64 bit di Windows tramite WoW; tuttavia, non vi è alcun motivo per farlo.

La pagina che collega lo dice molto bene:

x64 su x86 (x64 cross-compilatore)
Consente di creare file di output per x64. Questa versione di cl.exe viene eseguita come processo a 32 bit , nativa su una macchina x86 e in WOW64 su un sistema operativo a 64 bit di Windows.

x64 su x64
Consente di creare uscita file per x64. Questa versione di cl.exe viene eseguita come processo nativo su una macchina x64 .

Grazie a Brian R. Bondy per la citazione formattazione

7

Da quello che si è collegato:

x64 su x86 (x64 cross-compilatore)
Consente di creare file di output per x64. Questa versione di cl.exe viene eseguita come processo a 32 bit , nativa su una macchina x86 e in WOW64 su un sistema operativo a 64 bit di Windows.

x64 su x64
Consente di creare uscita file per x64. Questa versione di cl.exe viene eseguita come processo nativo su una macchina x64 .

Parafrasato:

Se si utilizza x86_amd64, poi si sono tipicamente da una macchina x86 e si desidera creare i file x64 che girano nativamente su x64. Si potrebbe anche usare questa opzione su una macchina x64 ma il compilatore verrà eseguito con l'emulazione WOW64.

Se si utilizza AMD64, si sta sviluppando su una macchina x64 e si desidera creare file x64 eseguiti in modo nativo su x64. Il compilatore è in esecuzione nativamente in x64. Questa opzione è più efficiente per creare programmi x64.

Ci si potrebbe chiedere perché mai sviluppare un programma x64 su un computer x86, poiché non è possibile eseguirlo non è possibile eseguirne il debug. Bene, è ancora utile ad esempio se si ha un server di build che è x86 e che il server di compilazione ha bisogno di generare entrambi gli output x86 e x64.

Come è possibile che un compilatore esegua x64 se è un programma x86 (x86_amd64)? Questa è la stessa ragione per cui puoi eseguire qualsiasi programma x86 sulla tua macchina x64 ... Grazie all'emulazione WOW64.

Qual è l'emulazione WOW64:

emulazione WOW64 accade quando si esegue un programma x 86 su un computer x64 (o IA64). WOW64 sta per Windows 32 su Windows 64. È un livello di emulazione su macchine x64 che consente di eseguire programmi x86.

Le operazioni del file system verranno reindirizzate alle cartelle WOW64 e il registro verrà reindirizzato anche a un nodo secondario. Ad esempio, quando si tenta di ottenere la cartella per i file di programma, verrà restituito c:\program files (x86)\ se si utilizza WOW64 ma verrà restituito c:\program files\ se si utilizza x64.

Un altro esempio, per il registro se si tenta di scrivere su HKLM\Software\Something, verrà effettivamente reindirizzato a HKLM\SOFTWARE\Wow6432Node\Something senza la conoscenza del programma x86.

L'esecuzione di una versione x64 nativa sarà più efficiente rispetto all'emulazione WOW64 Perché? Perché non hai quel livello di emulazione in più di trasformare le tue chiamate a 32 bit in quelle a 64 bit.

A proposito, se si sta eseguendo la versione x64 di Windows è possibile vedere quali processi sono in esecuzione attraverso WOW64 poiché avranno un * 32 aggiunto al nome del processo nell'elenco dei processi.

+0

versioni Sia il x86_amd64 e amd64 creano x64 eseguibili nativi che sia eseguito come un processo a 64 bit nativo su un sistema operativo a 64 bit. WOW64 è per l'esecuzione di eseguibili nativi a 32 bit su un sistema operativo x64. Il compilatore x86 genererà eseguibili nativi a 32 bit che dovrebbero essere eseguiti sotto WOW64. – joshperry

+0

@ joshperry: accetta vedere la mia modifica. –

+0

@ BrianR.Bondy Un po 'tardi, ma sono ancora confuso dall'opzione amd64_x86. Capisco che permette al toolset (cl/link) di funzionare come processi a 64 bit. OK. Ma i binari generati hanno come target l'architettura x86, corretta? Che cosa significa esattamente quest'ultimo? I binari a 64 bit prodotti da amd64_x86 sono inutili? – ForeverLearning

Problemi correlati