সি বা সি++-এ ইন্টিজার টাইপ ডেটার জন্য চারটি ভিন্ন ডেটা টাইপ রয়েছে: short, int, long, long long। প্রতিটি ভিন্ন মেমোরি স্পেস নেয়। সাইজ আর্কিটেকচার, অপারেটিং সিস্টেম ও কম্পাইলারের ওপর ভিন্ন হয়। কখনো int ৪ বাইট, কখনো ২ বাইট। তাই ক্রস কম্পাইলার ব্যবহার করা হয়।
ক্রস কম্পাইলার হলো এমন কম্পাইলার যা বর্তমান প্ল্যাটফর্ম ছাড়া অন্য প্ল্যাটফর্মের জন্য কম্পাইল করতে পারে।
নিচের কোড ৩২-বিট ও ৬৪-বিট সিস্টেমে কম্পাইল করলে ভিন্ন আউটপুট দেবে।
উদাহরণ কোড
#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
এই উদাহরণ থেকে বোঝা যায় long ডেটা টাইপ কম্পাইলার অনুযায়ী ভিন্ন হয়। এর কারণ কী?
CPU প্রাইমারি মেমোরি (RAM) থেকে ডেটা কল করে মেমোরি অ্যাড্রেস রেজিস্টার (MAR) দিয়ে অ্যাড্রেস দিয়ে। লোকেশন পাওয়ার পর এটি মেমোরি বাফার রেজিস্টার (MBR)-এ ট্রান্সফার হয়। ডেটা CPU রেজিস্টারে স্টোর হয় পরবর্তী ব্যবহার માટે। ডেটা বাসের সাইজ CPU রেজিস্টারের সাইজ নির্ধারণ করে। ৩২-বিট সিস্টেমে একবারে ৪-বাইট ডেটা কল করা যায়। যদি ডেটা ৩২-বিটের চেয়ে বড় হয়, তবে দুই সাইকেল লাগে। তাই ছোট ডেটার জন্য কোনো পার্থক্য নেই।