gccでのx86とamd64の時のsizeofの値
linux上でgcc-4.3を使った場合。違いはptr型、long、long double、size_t、time_tなどで起こる。
x86
sizeof(int) = 4 sizeof(void *) = 4 sizeof(size_t) = 4 sizeof(ptrdiff_t) = 4 sizeof(wchar_t) = 4 sizeof(void) = 1 sizeof(clock_t) = 4 sizeof(time_t) = 4 sizeof(FILE) = 148 sizeof(fpos_t) = 12 sizeof(div_t) = 8 sizeof(char) = 1 sizeof(short int) = 2 sizeof(long int) = 4 sizeof(long long int) = 8 sizeof(float) = 4 sizeof(double) = 8 sizeof(long double) = 12 sizeof(_Bool) = 1 sizeof(bool) = 1 sizeof(_Complex) = 16 sizeof(float complex) = 8 sizeof(double complex) = 16 sizeof(long double complex) = 24
amd64
sizeof(int) = 4 sizeof(void *) = 8 sizeof(size_t) = 8 sizeof(ptrdiff_t) = 8 sizeof(wchar_t) = 4 sizeof(void) = 1 sizeof(clock_t) = 8 sizeof(time_t) = 8 sizeof(FILE) = 216 sizeof(fpos_t) = 16 sizeof(div_t) = 8 sizeof(char) = 1 sizeof(short int) = 2 sizeof(long int) = 8 sizeof(long long int) = 8 sizeof(float) = 4 sizeof(double) = 8 sizeof(long double) = 16 sizeof(_Bool) = 1 sizeof(bool) = 1 sizeof(_Complex) = 16 sizeof(float complex) = 8 sizeof(double complex) = 16 sizeof(long double complex) = 32
ソース: sizeof.c
// gcc -std=c99 -Wall sizeof.c #include <stdlib.h> #include <stdio.h> #include <stddef.h> #include <stdbool.h> #include <stdint.h> #include <complex.h> #include <wchar.h> #include <time.h> #include <fenv.h> #include <inttypes.h> #define size(type) printf("sizeof(" #type ") = %" PRIuPTR "\n", sizeof(type)) int main() { size(int); size(void *); size(size_t); size(ptrdiff_t); size(wchar_t); size(void); size(clock_t); size(time_t); size(FILE); size(fpos_t); size(div_t); size(char); size(short int); size(long int); size(long long int); size(float); size(double); size(long double); size(_Bool); size(bool); size(_Complex); size(float complex); size(double complex); size(long double complex); //size(_Imaginary); // not support on gcc-4.3 return 0; }
size_t型の値表示のprintfフォーマットコードは、inttypes.hのPRIuPTRを使うので正解らしい。