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を使うので正解らしい。