83 votes

Quelle devrait être la taille de sizeof(int) sur une machine 64 bits ?

Duplicata possible :
taille d'un int, d'un long, etc.
La taille d'un int dépend-elle du compilateur et/ou du processeur ?
Qu'est-ce qui détermine la taille d'un entier ?

J'utilise un 64-bit machine.

$ uname -m
x86_64
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
$ 

Lorsque j'ai exécuté le programme suivant, j'ai obtenu le message suivant sizeof(int) comme 4-bytes .

#include <stdio.h>

int main(void)
{
    printf("sizeof(int) = %d bytes\n", (int) sizeof(int));

    return 0;
}

Si j'exécute un 16- , 32- y 64- de la machine à bits, cela ne veut-il pas dire que la taille d'un integer es 16- , 32- y 64- respectivement ?

Dans ma machine, j'ai trouvé le WORD_BIT es 32 . Ne devrait-il pas être 64 sur un 64-bit machine ?

$ getconf WORD_BIT
32
$ 

Et, ne faudrait-il pas que le sizeof(int) être 64-bits ( 8 bytes ) dans le cas ci-dessus ?

72voto

Eugene Points 276

La taille d'un pointeur doit être de 8 octets pour tout compilateur C/C++ 64 bits, mais pas nécessairement la taille d'un int.

61voto

Scott Hunter Points 10356

Il n'est pas nécessaire que ce soit le cas ; l'expression "machine 64 bits" peut avoir plusieurs significations, mais elle signifie généralement que l'unité centrale possède des registres de cette taille. La taille d'un type est déterminée par le compilateur, qui n'a rien à voir avec le matériel réel (bien que ce soit généralement le cas) ; en fait, différents compilateurs sur la même machine peuvent avoir des valeurs différentes pour cela.

32voto

Dani Points 13077

Pas vraiment. Pour des raisons de compatibilité ascendante, il s'agit de 32 bits.
Si vous voulez du 64 bits, vous avez long , size_t o int64_t

11voto

juanchopanza Points 115680

En C++, la taille de int n'est pas spécifié explicitement. Il vous indique simplement que sa taille doit être au moins égale à celle de short int qui doit être au moins aussi grand que signed char . La taille des char en bits n'est pas non plus spécifiée explicitement, bien que sizeof(char) soit défini comme étant égal à 1. Si vous voulez un int de 64 bits, C++11 spécifie long long doit être d'au moins 64 bits.

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