Taille de short, int, long, float, double, long, double, char

Je veux trouver le (court /int /long /float /double /double long /char) la taille, j'ai donc écrit ce code:

printf("short\t\t%d\n", sizeof(short));    
printf("int\t\t%d\n", sizeof(int));
printf("long\t\t%d\n", sizeof(long));
printf("float\t\t%d\n", sizeof(float));
printf("double\t\t%d\n", sizeof(double));  
printf("long double\t%d\n", sizeof(long double));    
printf("char\t\t%d\n", sizeof(char));   

MAIS
la sortie est:

type            bytes
short           512
int             512
long            1024
float           1024
double          1024
long double     1024
char            256

Pourquoi le nombre d'octets si grand?

Ne devrait-elle pas être de 2, 8, ...?

vous avez raison, il devrait normalement... qu'est-ce que le contexte vous sont en cours d'exécution? tout d'abord la langue (en supposant que C), compilateur, matériel, etc.
Ce qui est étrange. Quel système d'exploitation, compilateur, etc?
Pour ce que ça vaut, tout devient de gauche décalé de 8 bits...
sizeof renvoie une size_t, pas un int. Donc %d n'est pas approprié.
À l'aide de %d pour imprimer un size_t ne crée pas une conversion implicite de size_t à int. Au mieux, il réinterprète les octets d'un size_t comme un int. Au pire, il bolluxes la pile car la plate-forme de l'ABI a été violé, ce qui peut engendrer des débordements par un programme, un immédiates de l'accident, ou d'autres effets indésirables.

OriginalL'auteur | 2013-09-20