Trong C/C++, có 4 kiểu dữ liệu cho số nguyên: short, int, long, long long. Mỗi kiểu chiếm bộ nhớ khác nhau. Kích thước khác nhau tùy kiến trúc, OS, compiler. int đôi khi 4 byte, đôi khi 2 byte. Do đó dùng cross compiler (biên dịch cho nền tảng khác).
Biên dịch mã sau trên 32-bit và 64-bit cho kết quả khác:
Ví dụ
#include <stdio.h>
int main() {
printf("Size of int : %ld Bytes\n", sizeof(int));
printf("Size of long : %ld Bytes\n", sizeof(long));
printf("Size of long long : %ld Bytes", sizeof(long long));
return 0;
}
Kết quả
Size of int : 4 Bytes Size of long : 4 Bytes Size of long long : 8 Bytes
Tại sao kích thước khác nhau? CPU gọi dữ liệu từ RAM qua thanh ghi MAR (Memory Address Register). Dữ liệu chuyển sang MBR (Memory Buffer Register). Kích thước data bus quyết định kích thước thanh ghi CPU. Hệ 32-bit gọi 4 byte/lần. Dữ liệu > 32-bit tốn 2 chu kỳ. Với dữ liệu nhỏ không chênh lệch.