Qu'est-ce que uint_fast32_t et pourquoi devrait-il être utilisé à la place de l'ordinaire int et uint32_t?
Donc, la raison pour typedef
:ed types de données primitifs est à l'abstrait le faible niveau de représentation et de le rendre plus facile à comprendre (uint64_t
au lieu de long long
type, qui est de 8 octets).
Cependant, il est uint_fast32_t
qui a le même typedef
comme uint32_t
. Le fait d'utiliser le "rapide" de la version de rendre le programme plus vite?
- long long est peut-être pas 8 octets, il est possible d'avoir un long avec 1 octet (en cas CHAR_BIT est au moins 64) ou avec 3738383 octets. aussi un uint64_t peut être 1,2,4 ou 8 octets, CHAR_BIT doivent être 64, 3, 16 ou 8 pour que.
Vous devez vous connecter pour publier un commentaire.
int
peut être aussi petit que 16 bits sur certaines plates-formes. Il peut ne pas être suffisante pour votre application.uint32_t
n'est pas garanti d'exister. C'est une optiontypedef
que la mise en œuvre doit fournir ssi il a un type entier non signé de exactement 32-bits. Certains ont un 9 bits en octets par exemple, de sorte qu'ils n'ont pasuint32_t
.uint_fast32_t
membres de votre intention clairement: c'est un type de au moins 32 bits qui est le meilleur de rendement, d'un point de vue.uint_fast32_t
peut être en fait 64 bits. C'est à la mise en œuvre.Ce que vous regardez n'est pas la norme. C'est une mise en oeuvre particulière (BlackBerry). Donc vous ne pouvez pas déduire à partir de là que
uint_fast32_t
est toujours la même queuint32_t
.Voir aussi:
Exotiques architectures les comités des normes de soins sur.
Mon opinion vision pragmatique des types d'entiers en C et C++.
uint_least32_t
trop, ce qui est la même queuint_fast32_t
sauf qu'il favorise les petits magasin plutôt que sur la rapidité.La différence réside dans leur exacte-ness et de la disponibilité.
La doc ici dit:
Et
Donc, la différence est à peu près clair que
uint32_t
est un type qui a exactement32
bits, et une mise en œuvre devrait fournir seulement si elle est de type avec exactement 32 bits, et alors il peut typedef ce typeuint32_t
. Cela signifie,uint32_t
peut ou peut ne pas être disponible.D'autre part,
uint_fast32_t
est un type qui a au moins 32 bits, ce qui signifie aussi, si une mise en œuvre peut typedefuint32_t
commeuint_fast32_t
si il fournituint32_t
. Si elle ne fournit pasuint32_t
, puisuint_fast32_t
pourrait être une définition de type de n'importe quel type qui a au moins32
bits.uint32_t
est exactement 32 bits sur tous les systèmes (si elle existe), ce qui pourrait ne pas être plus rapide par rapport à celui qui a, disons, 64-bit.uint_fast32_t
sur l'autre main au moins 32 bits, peut-être même de 64 bits.uint16_t x;
est stocké dans un 32 bits s'inscrire sur le ARM7TDMI, le codex++;
peut-être besoin d'être évaluéx=((x+1)<<16)>>16);
. Sur des compilateurs pour cette plate-forme,uint_fast16_t
serait le plus susceptible d'être définie comme synonyme deuint32_t
pour l'éviter.[u]int_(fast|least)N_t
pas aussi en option? Sûrement pas toutes les architectures sont requises par la Norme pour prendre en charge les types primitifs d'au moins 64 bits? Pourtant, le libellé destdint.h
implique qu'ils doivent. Il semble bizarre pour moi que nous avons à l'application que depuis 1999, quelques années avant l'informatique 64 bits est devenu mainstream - pour ne rien dire de la traîne (dans de nombreux cas, toujours d'actualité) des architectures embarquées. Cela semble comme une grande surveillance pour moi.Lorsque vous
#include inttypes.h
dans votre programme, vous aurez accès à tout un tas de façons différentes de représenter les entiers.La uint_fast*_t type définit simplement le type le plus rapide pour représenter un nombre donné de bits.
Pensez-y de cette façon: vous définissez une variable de type
short
et de l'utiliser plusieurs fois dans le programme, ce qui est totalement valide. Cependant, le système que vous êtes en train de travailler peuvent travailler plus rapidement avec des valeurs de typeint
. Par définition d'une variable de typeuint_fast*t
, l'ordinateur choisit simplement le plus efficace de la représentation qu'il peut fonctionner avec.Si il n'y a pas de différence entre ces représentations, le système choisit celui qu'il veut, et l'utilise de façon constante tout au long.
Noter que la version rapide pourrait être de plus de 32 bits. Alors que la vitesse de l'int s'intégrera parfaitement dans un registre et être aligné et assimilés: mais, il utilisera plus de mémoire. Si vous avez de grands tableaux de la ces votre programme sera plus lent en raison de plus de mémoire cache et de la bande passante.
Je ne pense pas que les PROCESSEURS modernes bénéficieront de fast_int32, car généralement le signe d'étendre de 32 à 64 bits, peut se produire au cours de l'instruction de chargement et l'idée qu'il existe un "native" format de nombre entier qui est plus rapide est à l'ancienne.