Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำเป็นต้องมีประเภทข้อมูล "ยาว" ใน C และ C ++ หรือไม่


ใน 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

ผลลัพธ์

Size of int : 4 Bytes
Size of long : 8 Bytes
Size of long long : 8 Bytes

จากตัวอย่างนี้ เราจึงเข้าใจได้ง่ายว่าประเภทข้อมูลแบบยาวนั้นแตกต่างจากคอมไพเลอร์ แล้วเหตุผลเบื้องหลังคืออะไร?

CPU เรียกข้อมูลจากหน่วยความจำหลัก (RAM) โดยระบุที่อยู่ของ Memory Address Register (MAR) เมื่อพบตำแหน่งแล้ว ตำแหน่งนั้นจะถูกโอนไปยัง Memory Buffer Register (MBR) ข้อมูลจะถูกเก็บไว้ในการลงทะเบียน CPU เพื่อการใช้งานต่อไป ดังนั้นขนาดของบัสข้อมูลจึงกำหนดขนาดของการลงทะเบียน CPU สำหรับระบบ 32 บิต สามารถเรียกข้อมูลได้ครั้งละ 4 ไบต์เท่านั้น หากข้อมูลมีขนาดใหญ่กว่า 32 บิต จะใช้เวลาสองรอบ ดังนั้นสำหรับข้อมูลที่มีขนาดเล็กลง ก็ไม่ทำให้เกิดความแตกต่างใดๆ