data structure alignment and padding in c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31



typedef struct
{
char c;
int i;
}T_FOO;

typedef struct
{
int i;
char c;
}U_FOO;

int ()
{
printf("sizeof(char) = %ldn", sizeof(char));
printf("sizeof(int) = %ldn", sizeof(int));
printf("sizeof(long) = %ldn", sizeof(long));

T_FOO a;
U_FOO b;

printf("a.c -> %ld, a.i -> %ldn", (void *)&a.c - (void *)&a, (void *)&a.i - (void *)&a);
printf("b.i -> %ld, b.c -> %ldn", (void *)&b.i - (void *)&b, (void *)&b.c - (void *)&b);

printf("sizeof(a) = %ldn", sizeof(a));
printf("sizeof(b) = %ldn", sizeof(b));
return 0;
}