Khác biệt do byte padding (đệm byte) và alignment (căn chỉnh). Mọi kiểu dữ liệu có yêu cầu alignment. Bộ xử lý có độ dài từ xử lý (word size) theo kiến trúc. Trên máy 32-bit, word size 4 byte.
Ví dụ struct:
Ví dụ
#include <iostream>
using namespace std;
struct X {
char b[3];
int c;
};
int main() {
char b[3];
int c;
int total = sizeof(b) + sizeof(c);
cout << sizeof(X) << endl; // 8
cout << total; // 7
}Đầu ra
8 7
Trên máy 64-bit. Trong struct, mảng char b[3] đặt trong bộ nhớ, nếu đặt int c (4 byte) ngay sau vi phạm quy tắc alignment. Byte thừa ở cuối b bị bỏ qua, c bắt đầu từ ranh giới 4 byte. Gây kích thước lớn hơn tổng.
Tham khảo: https://en.wikipedia.org/wiki/Data_structure_alignment