Kích thước kiểu struct lấy bởi sizeof() không luôn bằng tổng kích thước từng thành viên. Đôi khi trình biên dịch thêm padding (đệm) tránh vấn đề căn chỉnh (alignment). Do đó kích thước thay đổi. Padding thêm khi thành viên cấu trúc theo sau thành viên kích thước lớn hơn hoặc ở cuối cấu trúc. Trình biên dịch khác có ràng buộc căn chỉnh khác. Theo chuẩn C, căn chỉnh cấu trúc tổng thể phụ thuộc triển khai.
Trường hợp 1
Trong trường hợp này double z dài 8 byte, lớn hơn x (4 byte). Do đó thêm 4 byte padding. Kiểu short y có 2 byte nên thêm 6 byte padding.

Ví dụ mã
#include <stdio.h>
struct myStruct {
int x; // Integer 4 byte, padding 4 byte
double z; // double 8 byte, không padding
short int y; // short 2 byte, padding 6 byte
};
main() {
printf("Kích thước struct: %d", sizeof(struct myStruct));
}Kết quả 2
Kích thước struct: 24
Trường hợp 2
Đặt double trước, chiếm 8 byte. int x (4 byte) thêm vào, còn 4 byte trống. Khi thêm short y, nó lấp vào 4 byte đó, tổng 16 byte.

Ví dụ mã
#include <stdio.h>
struct myStruct {
double z; // double 8 byte, không padding
int x; // int 4 byte, padding 4 byte
short int y; // short 2 byte, padding 6 byte
};
main() {
printf("Kích thước struct: %d", sizeof(struct myStruct));
}Kết quả 2
Kích thước struct: 16
Trường hợp 3
Trường hợp 3 cũng 16 byte nhưng sắp xếp khác. double trước, sau short y. Khi chèn int x, nó lấp vào 6 byte còn lại. Có padding sau short nhưng không padding sau int.

Ví dụ mã
#include <stdio.h>
struct myStruct {
double z; // double 8 byte, không padding
short int y; // short 2 byte, padding 6 byte
int x; // int 4 byte, padding 4 byte
};
main() {
printf("Kích thước struct: %d", sizeof(struct myStruct));
}Kết quả 2
Kích thước struct: 16