2013-09-27 12 views
7

Come posso verificare se la mia app è compilata a 32-bit o 64-bit?Verifica se l'app è costruita a 32 o 64 bit?

Questo è utile per eseguire il debug del codice di livello basso (ad esempio con i buffer).

+3

Perché hai bisogno di sapere? Il codice scritto correttamente dovrebbe funzionare in entrambi i modi. – dpassage

+0

Sono d'accordo con @dpassage. Anche se è necessario sapere controllare il modello del dispositivo. https://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/occ/instp/UIDevice/model – Desdenova

+0

@dpassage Commento molto ingenuo. È vero per le cose semplici, ma sicuramente no, quando si desidera ottimizzare il codice per diverse architetture della CPU. –

risposta

2

È possibile verificare la dimensione di un puntatore. Credo su 32 bit è 4bytes e 64 Occorre 8.

if(sizeof(void*) == 4) then 32bit else 64bit 
+2

int rimane 4 byte in 64 bit. –

+0

oh questo è triste, si potrebbe provare sizeof (void) – rcpfuchs

+1

'sizeof (void *)' –

16
#ifdef __LP64__ 
    NSLog(@"64-bit\t"); 
#else 
    NSLog(@"32-bit\t"); 
#endif 
+3

Questo tempo di compilazione. La domanda è per runtime. –

18

controllo del tempo di compilazione comporterebbe #ifdef 'zione per __LP64__, che è formato standard tipo di dati di ARM. Una soluzione runtime comporterebbe controllando la dimensione dei puntatori, in questo modo:

if (sizeof(void*) == 4) { 
    // Executing in a 32-bit environment 
} else if (sizeof(void*) == 8) { 
    // Executing in a 64-bit environment 
} 

Per fortuna, le dimensioni del puntatore sono l'unica cosa che i diversi standard per la compilazione di codice a 64 bit sembrano concordare.

+5

Solo per FYI, entrambe le soluzioni '__LP64__' e' sizeof() 'sono in fase di compilazione. La valutazione di sizeof fa parte del processo di compilazione e non una funzione. Il compilatore sostituisce sostanzialmente sizeof (tipo) con la dimensione di quel tipo sul sistema che stai compilando. Idealmente, il #ifdef e if/else finiranno per compilarlo in modo identico perché il compilatore vedrà che 8 è sempre == 8 e ottimizza il ramo 8 == 4. – ultramiraculous

+0

Tecnicamente, sei corretto (ma il tuo argomento è basato sull'assunzione del compilatore di ottimizzazione). Forse [questo] (http://stackoverflow.com/a/7984249/945847) si adatterebbe con una definizione più rigorosa di "controllo di runtime". – CodaFi

Problemi correlati