type sirve que para long data bool and c++ c types

c++ - sirve - ¿Qué es uint_fast32_t y por qué debería usarse en lugar del int normal y uint32_t?



long long c++ (4)

Cuando #include inttypes.h en tu programa, obtienes acceso a un conjunto de formas diferentes para representar enteros.

El tipo uint_fast * _t simplemente define el tipo más rápido para representar un número dado de bits.

Piénselo de esta manera: defina una variable de tipo short y úsela varias veces en el programa, que es totalmente válida. Sin embargo, el sistema en el que está trabajando podría funcionar más rápidamente con valores de tipo int . Al definir una variable como tipo uint_fast*t , la computadora simplemente elige la representación más eficiente con la que puede funcionar.

Si no hay diferencia entre estas representaciones, entonces el sistema elige la que quiera, y la usa de manera constante.

Por lo tanto, la razón para los tipos de datos primitivos typedef : ed es abstraer la representación de bajo nivel y hacer que sea más fácil de comprender ( uint64_t lugar del tipo long long , que es de 8 bytes).

Sin embargo, hay uint_fast32_t que tiene el mismo typedef que uint32_t . ¿El uso de la versión "rápida" hará que el programa sea más rápido?


La diferencia radica en su exactitud y disponibilidad.

El doc aquí dice:

tipo entero sin signo con un ancho de exactamente 8, 16, 32 y 64 bits respectivamente ( proporcionado solo si la implementación admite directamente el tipo ):

uint8_t uint16_t uint32_t uint64_t

Y

el tipo entero sin signo más rápido sin signo con un ancho de al menos 8, 16, 32 y 64 bits respectivamente

uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t

Entonces, la diferencia es bastante clara: uint32_t es un tipo que tiene exactamente 32 bits, y una implementación debería proporcionarlo solo si tiene un tipo con exactamente 32 bits, y luego puede escribir ese tipo como uint32_t . Esto significa que uint32_t puede estar disponible o no.

Por otro lado, uint_fast32_t es un tipo que tiene al menos 32 bits, lo que también significa que si una implementación puede uint32_t uint_fast32_t uint32_t como uint_fast32_t si proporciona uint32_t . Si no proporciona uint32_t , entonces uint_fast32_t podría ser un typedef de cualquier tipo que tenga al menos 32 bits.


Tenga en cuenta que la versión rápida podría tener más de 32 bits. Mientras que el int rápido encajará muy bien en un registro y estará alineado y similar: pero, usará más memoria. Si tiene grandes matrices de éstos, su programa será más lento debido a más hits de memoria caché y ancho de banda.

No creo que el CPUS moderno se beneficie de fast_int32, ya que, en general, la extensión del signo de 32 a 64 bits puede ocurrir durante la instrucción de carga y la idea de que existe un formato entero ''nativo'' que es más rápido está pasada de moda.


  • int puede ser tan pequeño como 16 bits en algunas plataformas. Puede no ser suficiente para su aplicación.
  • uint32_t no se garantiza que exista. Es un typedef opcional que la implementación debe proporcionar si tiene un tipo entero sin signo de exactamente 32 bits. Algunos tienen bytes de 9 bits, por ejemplo, por lo que no tienen un uint32_t .
  • uint_fast32_t expresa claramente su intención: es un tipo de al menos 32 bits, que es el mejor desde el punto de vista del rendimiento. uint_fast32_t puede ser de hecho de 64 bits de longitud. Depende de la implementación.

... hay uint_fast32_t que tiene el mismo typedef que uint32_t ...

Lo que estás viendo no es el estándar. Es una implementación particular (BlackBerry). Entonces no se puede deducir de ahí que uint_fast32_t sea ​​siempre igual a uint32_t .

Ver también: