2010-07-16 13 views
7

Quali sono le differenze tra la compilazione di un'app Mac in Xcode con l'Architettura attiva impostata su i386 rispetto a x86_64 (scelta nel menu a tendina in alto a sinistra della finestra principale)? Nelle impostazioni di costruzione per il progetto, le opzioni di architettura sono Standard (32/64 bit universale), 32 bit universale e 64 bit Intel. In pratica, cosa significano questi e come si decide?Differenze tra la compilazione per i386 vs x86_64 in Xcode?

Supponiamo che uno abbia come target OS X 10.5 e versioni successive. Vedo nel Monitor attività che compila per x86_64 risultati in un'app che utilizza più memoria di una compilata per i386. Qual è il vantaggio? So che 64-bit è "il futuro", ma visto l'uso più elevato della memoria, avrebbe senso scegliere 32 bit in assoluto?

risposta

7

32/64-bit universale - i386, x86_64, ppc

32 bit universale - i386, ppc

a 64-bit Intel - Intel a 64 bit solo

ppc64 è non più supportato.


binari x86_64 sono più veloci per una serie di motivi; più veloci ABI, più registri, su molti (la maggior parte & tutte le nuove macchine) Macchine il kernel è a 64 bit & chiamate del kernel sono più veloci, etc.etc.etc ...

Mentre a 64 bit ha un po 'di memoria in testa direttamente correlato In generale, per quanto il puntatore appesantisca le strutture dati della tua app, tieni presente che le applicazioni a 32 bit trascinano nelle versioni a 32 bit di tutti i framework. Se la tua è l'unica app a 32 bit sul sistema, si verificherà una quantità massiccia di confronto di overhead con la versione a 64 bit.

Le app a 64 bit godono anche dell'ultimo e più grande Objective-C ABI; ivars sintetizzati, ivars non fragili, eccezioni C++/ObjC unificate, blocchi @try a costo zero ecc ... e ci sono anche alcune ottimizzazioni possibili solo a 64 bit.

0

A meno che non si abbia un motivo per compilare x86_64, si consiglia di compilare solo per i386 (e PPC se lo supportano). Leggere Apple's stance sulla questione:

Anche se eseguibili a 64 bit rendono più facile per voi per gestire grandi quantità di dati set (rispetto alla mappatura della memoria di file di grandi dimensioni in un'applicazione a 32 bit), l'uso di Gli eseguibili a 64 bit possono sollevare altri problemi. Pertanto, il tuo dovrebbe passare il tuo software a un formato eseguibile a 64 bit a a 64 bit solo quando l'ambiente a 64 bit offre un avvincente vantaggio per i tuoi scopi specifici.

+4

Mentre ciò vale per il software esistente, tutti i nuovi software devono essere scritti e ottimizzati per 64 bit. – bbum

-1

Ho un comportamento strano se compilo il codice x86_64. Questo codice è limitato per l'avvio su Mac OS Server Edition. In edizione standard sta funzionando bene. Forse qualcuno sa dov'è una ragione per avere questo errore?

applicazioni
0

iOS devono funzionare su molte architetture differenti:

arm7: Used in the oldest iOS 7-supporting devices[32 bit] 
arm7s: As used in iPhone 5 and 5C[32 bit] 
arm64: For the 64-bit ARM processor in iPhone 5S[64 bit] 

i386: For the 32-bit simulator 
x86_64: Used in 64-bit simulator 

Xcode emula sostanzialmente l'ambiente di 32 bit o 64 bit in base a quanto impostato nella Architettura valido - i386 o x86_64 rispettivamente

Ogni architettura richiede un binario diverso, e quando costruisci un'app Xcode costruisce l'architettura corretta per qualsiasi cosa tu stia attualmente lavorando. Ad esempio, se hai richiesto di eseguirlo nel simulatore, verrà creata solo la versione i386 (o x86_64 per 64 bit).

Problemi correlati