taille de la variable int

Comment la taille de int est-elle décidée?

Est-il vrai que la taille de int dépendra du processeur. Pour une machine 32 bits, ce sera 32 bits et pour 16 bits, 16.

Sur ma machine, il affiche 32 bits, bien que la machine ait un processeur 64 bits et Ubuntu 64 bits installé.

    Cela dépend de la mise en œuvre. La seule chose que garantit le standard C est que

    sizeof(char) == 1 

    et

     sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long) 

    et aussi quelques valeurs minimum représentables pour les types, ce qui implique que char est long d'au moins 8 bits, int est d'au moins 16 bits, etc.

    Cela doit donc être décidé par l’implémentation (compilateur, système d’exploitation, ...) et être documenté.

    Cela dépend du compilateur.

    Par exemple, essayez un ancien compilateur C turbo et cela donnerait une taille de 16 bits pour un int car la taille du mot (la taille que le processeur pourrait traiter avec le moins d’effort) au moment de l’écriture du compilateur était de 16.

    Cela dépend du compilateur principal. si vous utilisez turbo c, la taille de l’entier est de 2 octets. sinon, vous utilisez GNU gccomstackr, cela signifie que la taille de l’entier est de 4 octets. cela dépend de la seule implémentation dans le compilateur C.

    La taille de l’entier dépend essentiellement de l’ architecture de votre système. Généralement, si vous avez une machine 16-bit , votre comstackr devra supporter un int de size 2 byte. Si votre système est de 32 bits, le compilateur doit prendre en charge 4 octets pour l’entier.

    En plus de détails,

    • Le concept de data bus de data bus entre en jeu. Oui, 16 bits, 32 bits ne signifie rien d’autre que la size of data bus de votre système.
    • La taille du bus de données est nécessaire pour déterminer la taille d’un nombre entier car, le but du bus de données est de fournir des données au processeur.Le maximum qu’il peut fournir au processeur en une seule extraction est important et cette taille maximale est préférée par le compilateur pour donner une donnée à la fois.
    • Basé sur cette taille de bus de données de votre système, le compilateur est conçu pour fournir une taille maximale du bus de données exprimée en tant que taille entière.
     x06->16-bit->DOS->turbo c->size of int->2 byte x306->32-bit>windows/Linux->GCC->size of int->4 byte 

    Faire le plus large possible n’est pas le meilleur choix. (Le choix est fait par les concepteurs ABI .)

    Une architecture 64 bits telle que x86-64 peut fonctionner efficacement sur int64_t , il est donc naturel que 64 bits soit long . (Microsoft a conservé une long d’ long 32 bits dans leur ABI x86-64, pour diverses raisons de portabilité qui tiennent compte des API et des bases de code existantes. C’est fondamentalement sans importance, car le code portable qui se soucie réellement de la taille des types devrait utiliser int32_t et int64_t au lieu d’être int32_t à propos de int et long .)

    Avoir int be int32_t réalité un code meilleur et plus efficace dans de nombreux cas. Un tableau de type int seulement 4B par élément n’a que la moitié de l’empreinte en cache d’un tableau de int64_t . De plus, la taille par défaut de l’opérande 32 bits est spécifique à x86-64. Par conséquent, les instructions 64 bits nécessitent un octet supplémentaire pour le préfixe REX. La densité de code est donc meilleure avec les entiers 32 bits (ou 8 bits) qu’avec 16 ou 64 bits. (Voir le wiki x86 pour des liens vers docs / guides / ressources d’apprentissage.)

    Si un programme nécessite des types entiers 64 bits pour un fonctionnement correct, il n’utilisera pas int . (Stocker un pointeur dans un int au lieu d’un intptr_t est un bogue, et nous ne devrions pas aggraver l’ABI pour accepter un code cassé de la sorte.) Un programmeur écrivant int probablement prévu un type 32 bits, car la plupart des plates-formes fonctionnent de cette façon. (La norme ne garantit bien sûr que 16 bits).

    Comme on ne s’attend pas à ce que int soit en général à 64 bits (par exemple, sur les plates-formes 32 bits), et le rendant à 64 bits ralentira certains programmes (et presque aucun programme plus rapidement), int est de 32 bits dans la plupart des ABI à 64 bits.

    De plus, il doit y avoir un nom pour un type entier 32 bits, pour que int32_t soit un typedef .

    Oui. int taille dépend de la taille du compilateur. Pour un entier 16 bits, la plage de cet entier est comprise entre -32768 et 32767. Pour le compilateur 32 et 64 bits, elle augmentera.