পার্থক্যের কারণ: বাইট প্যাডিং (Padding) এবং এলাইনমেন্ট (Alignment)।
প্রসেসর আর্কিটেকচারের প্রসেসিং ওয়ার্ড লেঞ্থ অনুযায়ী ডেটা মেমরিতে এলাইন থাকে। ৩২-বিট মেশিনে ৪ বাইট, ৬৪-বিটে ৮ বাইট বাউন্ডারি।
উদাহরণ
#include <iostream>
using namespace std;
struct X {
char b[3]; // 3 bytes
int c; // 4 bytes
};
int main() {
char b[3];
int c;
int total = sizeof(b) + sizeof(c); // 3 + 4 = 7
cout << sizeof(X) << endl; // 8 (প্যাডিং কারণে)
cout << total;
}
আউটপুট (৬৪-বিটে)
8 7
ব্যাখ্যা: char b[3] ৩ বাইট নেয়। পরবর্তী int c ৪-বাইট বাউন্ডারি-তে শুরু হয়ে ৪ বাইট নেয়। ১ বাইট প্যাডিং (গ্যাপ) যোগ হয়। মোট ৮ বাইট।
নিয়ন্ত্রণ: #pragma pack(1) বা alignas (C++11) ব্যবহার করে প্যাডিং কমানো যায়, কিন্তু পারফরম্যান্স কমে যেতে পারে।
বিস্তারিত: Data Structure Alignment