Рассмотрим следующий пример:
#include <stdio.h>
#include <inttypes.h>
struct A {
uint32_t i1;
uint32_t i2;
uint32_t i3;
uint64_t i4;
uint32_t i5;
uint32_t i6;
uint32_t i7;
uint64_t i8;
uint32_t i9;
};
struct B {
uint32_t i1;
uint32_t i2;
uint32_t i3;
uint32_t i4;
uint32_t i5;
uint32_t i6;
uint32_t i7;
uint64_t i8;
uint64_t i9;
};
int
main()
{
struct A a;
struct B b;
printf("sizeof(a) = %u, sizeof(b) = %u\n", sizeof(a), sizeof(b));
return 0;
}
Вывод:
$ ./t2
sizeof(a) = 56, sizeof(b) = 48
$
Почему они отличаются на 64-битной машине? На 32-битной платформе результаты такие же:
$ ./t2
sizeof(a) = 44, sizeof(b) = 44