Dans l'ISO / CEI 9899: 2018 (C18), il est indiqué sous 7.20.1.3:
7.20.1.3 Types entiers de largeur minimale les plus rapides
1 Chacun des types suivants désigne un type entier qui est généralement le plus rapide 268) pour fonctionner avec tous les types entiers qui ont au moins la largeur spécifiée.
2 Le nom typedef
int_fastN_t
désigne le type entier signé le plus rapide avec une largeur d'au moins N. Le nom typedefuint_fastN_t
désigne le type entier non signé le plus rapide avec une largeur d'au moins N.3 Les types suivants sont requis:
int_fast8_t
,int_fast16_t
,int_fast32_t
,int_fast64_t
,uint_fast8_t
,uint_fast16_t
,uint_fast32_t
,uint_fast64_t
Tous les autres types de ce formulaire sont facultatifs.
268) Le type désigné n'est pas garanti d'être le plus rapide à toutes fins; si la mise en œuvre n'a pas de raisons claires de choisir un type plutôt qu'un autre, elle choisira simplement un type entier satisfaisant aux exigences de signature et de largeur.
Mais il n'est pas précisé pourquoi ces types entiers "rapides" sont plus rapides.
- Pourquoi ces types entiers rapides sont-ils plus rapides que les autres types entiers?
J'ai marqué la question avec C ++, car les types d'entiers rapides sont également disponibles en C ++ 17 dans le fichier d'en-tête de cstdint
. Malheureusement, dans l'ISO / CEI 14882: 2017 (C ++ 17), aucune explication de ce type n'existe; J'avais mis en œuvre cette section autrement dans le corps de la question.
Information: en C, ils sont déclarés dans le fichier d'en-tête de stdint.h
.
typedef
déclarations. Donc, généralement , cela se fait au niveau de la bibliothèque standard. Bien sûr, les C standards ne met aucune restriction réelle sur ce qu'ils typedef
à - ainsi , par exemple une mise en œuvre typique est de faire int_fast32_t
un typedef
de int
sur un système 32 bits, mais un compilateur hypothétique pourrait par exemple mettre en œuvre un __int_fast
type intrinsèque et promettent de faire un peu de fantaisie optimisations pour choisir le type de machine le plus rapide au cas par cas pour les variables de ce type, et la bibliothèque pourrait alors le typedef
faire.