ใน C หรือ C++ มีข้อมูลประเภท integer 4 แบบ ได้แก่ short, int, long และ long long แต่ละแบบใช้หน่วยความจำต่างกัน ขนาดแตกต่างกันในสถาปัตยะและระบบปฏิบัติการต่างๆ บางครั้ง int ใช้ 4 ไบต์ บางครั้ง 2 ไบต์ คอมไพเลอร์ก็ส่งผลเหมือนกัน จึงใช้ cross compiler
Cross compiler คือคอมไพเลอร์ที่คอมไพล์สำหรับแพลตฟอร์มอื่นนอกจากแพลตฟอร์มปัจจุบัน
หากคอมไพล์โค้ดต่อไปนี้ในระบบ 32-bit และ 64-bit จะได้ผลลัพธ์ต่างกัน
ตัวอย่าง
#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));
}
ผลลัพธ์ (32-bit)
Size of int : 4 Bytes Size of long : 4 Bytes Size of long long : 8 Bytes
ผลลัพธ์ (64-bit)
Size of int : 4 Bytes Size of long : 8 Bytes Size of long long : 8 Bytes
จากตัวอย่างเห็นว่า long datatype แตกต่างตามคอมไพเลอร์ เหตุผลคืออะไร?
CPU เรียกข้อมูลจากหน่วยความจำหลัก (RAM) โดยให้ที่อยู่ของ Memory Address Register (MAR) เมื่อพบที่อยู่ จะถ่ายโอนไป Memory Buffer Register (MBR) ข้อมูลเก็บใน CPU register ขนาดของ data bus กำหนดขนาด CPU register ระบบ 32-bit เรียกข้อมูล 4 ไบต์ต่อครั้ง ถ้าข้อมูลใหญ่กว่า 32-bit จะใช้ 2 รอบ ดังนั้นข้อมูลเล็กไม่แตกต่างกัน