Sulla vostra piattaforma, sono tutti i nomi per lo stesso tipo di dati sottostante. Su altre piattaforme, non lo sono.
int64_t
è necessario ESATTAMENTE 64 bit. Su architetture con (ad esempio) un byte da 9 bit, non sarà affatto disponibile.
int_least64_t
è il tipo di dati più piccolo con almeno 64 bit. Se int64_t
è disponibile, verrà utilizzato. Ma (per esempio) con una macchina a 9 bit, questo potrebbe essere 72 bit.
int_fast64_t
è il tipo di dati con almeno 64 bit e le migliori prestazioni aritmetiche. È presente principalmente per coerenza con int_fast8_t
e int_fast16_t
, che su molte macchine sarà a 32 bit, non a 8 o a 16. In qualche altro anno, potrebbe esserci un'architettura in cui la matematica a 128 bit è più veloce di 64-bit, ma non Penso che esista oggi.
Se state portando un algoritmo, che probabilmente vuole essere utilizzando int_fast32_t
, dal momento che si terrà alcun valore il vecchio codice a 32 bit in grado di gestire, ma sarà a 64 bit se è più veloce. Se stai convertendo i puntatori in numeri interi (perché?), Utilizza intptr_t
.
fonte
2012-02-16 20:18:43
Questi typedef sono degni di nota, ma sei sicuro di avere il problema giusto? "Porting to 64 bit" non dovrebbe in genere richiedere la modifica dei tipi. Nel migliore dei casi devi ricompilare. –
@KerrekSB: punto eccellente. Ho aggiornato la mia risposta per rispondere anche a questo. –
possibile duplicato di [Qual è la differenza tra intXX_t e int_fastXX_t?] (Http://stackoverflow.com/questions/9239558/what-is-the-difference-between-intxx-t-and-int-fastxx-t) –