En su plataforma, todos son nombres para el mismo tipo de datos subyacente. En otras plataformas, no lo son.
int64_t
se requiere que sea EXACTAMENTE de 64 bits. En arquitecturas con (por ejemplo) un byte de 9 bits, no estará disponible en absoluto.
int_least64_t
es el tipo de datos más pequeño con al menos 64 bits. Si int64_t
está disponible, se usará. Pero (por ejemplo) con una máquina de bytes de 9 bits, esto podría ser de 72 bits.
int_fast64_t
es el tipo de datos con al menos 64 bits y el mejor rendimiento aritmético. Está allí principalmente por coherencia con int_fast8_t
y int_fast16_t
, que en muchas máquinas será de 32 bits, no de 8 o 16. En algunos años más, puede haber una arquitectura en la que la matemática de 128 bits sea más rápida que la de 64 bits, pero yo no No creo que exista hoy.
Si está transfiriendo un algoritmo, es probable que quieren estar usando int_fast32_t
, ya que llevará a cabo ningún valor a su antiguo código de 32 bits puede manejar, pero habrá 64 bits si eso es más rápido. Si está convirtiendo punteros a números enteros (¿por qué?), Utilice intptr_t
.
Vale la pena conocer esos typedefs, pero ¿está seguro de que está viendo el problema correcto? "Portar a 64 bits" generalmente no debería requerir que cambie sus tipos. En el mejor de los casos, solo recompila. –
@KerrekSB: Excelente punto. He actualizado mi respuesta para abordar eso también. –
posible duplicado de [¿Cuál es la diferencia entre intXX_t e int_fastXX_t?] (Http://stackoverflow.com/questions/9239558/what-is-the-difference-between-intxx-t-and-int-fastxx-t) –