web-dev-qa-db-fra.com

Quel devrait être le sizeof (int) sur une machine 64 bits?

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

J'utilise une machine 64-bit.

$ 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 la sizeof(int) sous la forme 4-bytes.

#include <stdio.h>

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

    return 0;
}

Si j'utilise une machine à bits 16-, 32- Et 64-, Cela ne signifie-t-il pas que la taille d'un integer est de 16-, 32- Et 64- Bits respectivement?

Dans ma machine, j'ai trouvé que Word_BIT Est 32. Ne devrait-il pas s'agir de 64 Sur une machine 64-bit?

$ getconf Word_BIT
32
$ 

Et, la sizeof(int) ne devrait-elle pas être 64-bits (8 bytes) Dans le cas ci-dessus?

61

Ne doit pas être; "Machine 64 bits" peut signifier beaucoup de choses, mais signifie généralement que le processeur a des registres aussi volumineux. La taille d’un type est déterminée par le compilateur, ce 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 ceux-ci.

45
Scott Hunter

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

59
Eugene

Pas vraiment. pour la compatibilité ascendante, il s'agit de 32 bits.
Si vous voulez 64 bits, vous avez long, size_t ou int64_t

23
Dani

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

8
juanchopanza