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