> Le C défini 'int' comme 'le plus grand entier manipulé rapidement par la machine'.
Une citation a certainement une source, je ne la vois pas dans ton message. La norme dit en fait en 6.2.5 [#5]:
"A ``plain'' int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>)."
La norme parle de l'architecture du runtime, pas de l'architecture matérielle du processeur. Plus précisément, elle ne parle pas de registre du processeur. Mon interprétation est que l'implémenteur de compilateur se réfère aux conventions logicielles idoines de l'architecture cible (dépendante de l'OS et du processeur, évidemment).
Et, ô miracle, vois-je dans "IA-64 Software Conventions and Runtime Architecture Guide" en 4.1 (Data Representation, Fundamental types) que sizeof(int) vaut bien 4.
Concernant le "long", il est effectivement au moins aussi grand qu'un "int". Par contre, cela ne veut pas dire que ça fasse forcément 64 bits sur une archi 64 bits. En effet, mais là c'est le cas extrême des bizarreries, Microsoft a établi que le "long" resterait en fait à 32 bits sur ia64 (Windows XP 64 & co). Voir par exemple le "Quick Start Guide for Porting Applications for Win64" d'Intel...
Enfin, pour revenir au trucs rapidement manipulés par la machine. La norme définit en effet en 7.18.1.3, des entiers d'une certaine taille minimale qui peuvent généralement être manipulés rapidement. (cf. uint_fast32_t par exemple). Il ne s'agit pas de "int".
[^] # Re: a propos de 64 bits
Posté par Gwenole Beauchesne . En réponse à la dépêche Mandrake 8.1 sur IA64. Évalué à 1.
Une citation a certainement une source, je ne la vois pas dans ton message. La norme dit en fait en 6.2.5 [#5]:
"A ``plain'' int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>)."
La norme parle de l'architecture du runtime, pas de l'architecture matérielle du processeur. Plus précisément, elle ne parle pas de registre du processeur. Mon interprétation est que l'implémenteur de compilateur se réfère aux conventions logicielles idoines de l'architecture cible (dépendante de l'OS et du processeur, évidemment).
Et, ô miracle, vois-je dans "IA-64 Software Conventions and Runtime Architecture Guide" en 4.1 (Data Representation, Fundamental types) que sizeof(int) vaut bien 4.
Concernant le "long", il est effectivement au moins aussi grand qu'un "int". Par contre, cela ne veut pas dire que ça fasse forcément 64 bits sur une archi 64 bits. En effet, mais là c'est le cas extrême des bizarreries, Microsoft a établi que le "long" resterait en fait à 32 bits sur ia64 (Windows XP 64 & co). Voir par exemple le "Quick Start Guide for Porting Applications for Win64" d'Intel...
Enfin, pour revenir au trucs rapidement manipulés par la machine. La norme définit en effet en 7.18.1.3, des entiers d'une certaine taille minimale qui peuvent généralement être manipulés rapidement. (cf. uint_fast32_t par exemple). Il ne s'agit pas de "int".