70 votes

La taille d'un int dépend-elle du compilateur et / ou du processeur?

C'était une question d'entrevue! la taille d'un entier dépendrait-elle du compilateur ou du processeur?

122voto

AndreyT Points 139512

La réponse à cette question dépend de la façon dont beaucoup de considérations d'ordre pratique, nous sommes prêts à vous.

En fin de compte, en théorie, tout en C et C++ dépend du compilateur et sur le compilateur. Matériel/OS est d'aucune importance. Le compilateur est libre de mettre en place une couche d'abstraction matérielle de toute épaisseur et imiter absolument rien. Il n'y a rien pour empêcher un C ou C++ mise en œuvre de la mise en œuvre de l' int type de toute taille et de toute représentation, tant qu'il est assez grand pour répondre aux exigences minimales de la norme du langage. Des exemples pratiques de ce niveau d'abstraction sont facilement disponibles, par exemple les langages de programmation basé sur la "machine virtuelle" de la plateforme, à l'instar de Java.

Cependant, le C et le C++ sont conçus pour être très efficace langues. Afin d'atteindre l'efficacité maximale d'un C ou C++ mise en œuvre doit tenir compte de certaines considérations tirées du matériel sous-jacent. Pour cette raison, il fait beaucoup de sens pour s'assurer que chaque type de base est fondé sur une représentation directement (ou presque) pris en charge par le matériel. En ce sens, la taille des types de base reposent sur le matériel.

En d'autres termes, un C ou C++ pour la mise en œuvre d'un matériel 64 bits/plate-forme OS est absolument libre de mettre en oeuvre int comme un 71-bit 1-complément signé type intégral qui occupe 128 bits de la mémoire, à l'aide de l'autre de 57 bits comme rembourrage de bits qui sont toujours requis pour stocker la date de naissance de le compilateur auteur de la petite amie. Cette mise en œuvre ont même certaine valeur pratique: il peut être utilisé pour exécuter des tests de temps de la portabilité des programmes C/C++. Mais c'est là que l'utilité pratique de cette mise en œuvre serait la fin. Ne vous attendez pas à voir quelque chose comme ça dans un "normal" compilateur C/C++.

33voto

minjang Points 4437

Oui, cela dépend des deux processeurs (plus précisément, l'administration chargée de l'instruction set architecture), par exemple, x86 et x86-64) et les compilateurs, y compris le modèle de programmation. Par exemple, dans les ordinateurs 16 bits, sizeof (int) était de 2 octets. Les machines 32 bits 4 octets pour int. Il a été jugé int a été le natif de la taille d'un processeur, c'est à dire, la taille du registre. Cependant, les ordinateurs 32 bits ont été si populaire et un grand nombre de logiciel a été écrit pour la version 32 bits du modèle de programmation. Donc, il serait très déroutant si 64-bit ordinateur aurait 8 octets pour int. À la fois Linux et Windows reste 4 octets pour int. Mais, ils diffèrent dans la taille de l' long.

Veuillez prendre un coup d'oeil à la version 64 bits du modèle de programmation comme le LP64 pour la plupart des *nix et LLP64 pour Windows:

Ces différences sont en fait très embarrassant quand vous écrivez du code qui devrait fonctionner à la fois sur windows et Linux. Donc, je suis toujours à l'aide de int32_t ou int64_t, plutôt que d' long, via stdint.h.

7voto

Jerry Coffin Points 237758

Oui, ce serait. Voulaient-ils dire "ce qui dépendrait-il: du compilateur ou du processeur"? Dans ce cas, la réponse est fondamentalement "les deux". Normalement, int ne sera pas plus gros qu'un registre de processeur (sauf s'il est inférieur à 16 bits), mais il pourrait être plus petit (par exemple, un compilateur 32 bits s'exécutant sur un processeur 64 bits). En règle générale, toutefois, vous aurez besoin d'un processeur 64 bits pour exécuter du code avec un int 64 bits.

6voto

SCW Points 31

Sur la base des récentes recherches, j'ai fini mes études pour firmware entrevues:

L'impact le plus significatif de l'processeurs de l'architecture bits c'est à dire, 8 bits, 16 bits, 32 bits, 64 bits, est de savoir comment vous avez besoin de plus de stocker efficacement chaque octet de l'information afin de mieux calculer les variables dans le nombre de cycles minimum.

La taille en bits de votre processeur, vous dit ce que le naturel de la longueur des mots de la CPU est capable de gérer en un seul cycle. Un 32bit machine a besoin de 2 cycles pour gérer 64 bits double si elle est correctement aligné dans la mémoire. La plupart des ordinateurs personnels ont été, et sont encore en 32 bits donc la raison la plus probable pour le compilateur C, typique de l'affinité pour les 32 bits entiers avec des options pour les grands nombres en virgule flottante et long long ints.

Clairement, vous pouvez calculer de plus grandes tailles variables dans ce sens, le PROCESSEUR de l'architecture bits détermine la façon dont il aura pour stocker les grandes et les petites variables afin d'obtenir la meilleure efficacité possible, de traitement, mais il n'est en aucune façon un facteur limitant dans les définitions de l'octet de tailles pour les services de renseignements ou de caractères, qui est une partie de compilateurs et de ce qui est dicté par la convention ou de normes.

J'ai trouvé ce site très utile, http://www.geeksforgeeks.org/archives/9705pour expliquer comment le CPU naturel d'une longueur de mot de les effets de la façon dont il a choisi de stocker et de traiter de plus grandes et les petites, les types de variables, notamment en ce qui concerne à peu emballage dans des structures. Vous devez être très conscient de la façon dont vous avez choisi d'attribuer des variables parce que les plus grands variables doivent être alignées en mémoire de sorte qu'ils prennent le moins de nombre de cycles, lorsque divisé par le PROCESSEUR de la longueur des mots. Cela va ajouter beaucoup de potentiellement inutiles de la mémoire tampon/espace vide pour des choses comme des structures si vous avez mal ordonner la cession de vos variables.

0voto

Saurabh Points 1240

La taille de l'int est égale à la longueur du mot qui dépend de l'ISA sous-jacent. Processeur est simplement l'implémentation matérielle de l'ISA et le compilateur est simplement l'implémentation logicielle de l'ISA. Tout tourne autour de l'ISA sous-jacent. L’ISA le plus populaire est le IA-32 d’Intel de nos jours. il a une longueur de mot de 32 bits ou 4 octets. 4 octets pourraient être la taille maximale des compilateurs 'int' (tout simplement int, et non court ou long). basé sur IA-32, pourrait utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X