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 মেমরি অ্যাড্রেস রেজিস্টারের (MAR) ঠিকানা প্রদান করে প্রাথমিক মেমরি (RAM) থেকে ডেটা কল করে। অবস্থান পাওয়া গেলে, এটি মেমরি বাফার রেজিস্টারে (এমবিআর) স্থানান্তরিত হয়। ডেটা আরও ব্যবহারের জন্য CPU রেজিস্টারে সংরক্ষণ করা হয়। সুতরাং ডেটা বাসের আকার সিপিইউ রেজিস্টারের আকার নির্ধারণ করে। 32-বিট সিস্টেমের জন্য, এটি একবারে শুধুমাত্র 4-বাইট ডেটা কল করতে পারে। যদি ডেটা 32 বিটের চেয়ে বড় হয় তবে এটি দুটি চক্র লাগবে। তাই ছোট ডেটার জন্য এটি কোন পার্থক্য করে না।