কম্পিউটার টিউটোরিয়াল

কেন C/C++-এ struct-এর sizeof মেম্বারগুলোর sizeof-এর যোগফলের সমান নয়?

পার্থক্যের কারণ: বাইট প্যাডিং (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

  1. সি/সি++ প্রোগ্রামে n-তম ফিবোনাচ্চি নম্বর বের করা

  2. সি/সি++ প্রোগ্রামে ট্রায়্যাঙ্গুলার ম্যাচস্টিক নম্বর বের করা

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  4. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)