একটি স্ট্রাকটের সাইজফ এবং সেই স্ট্রাকটের প্রতিটি সদস্যের সাইজফের যোগফলের মধ্যে পার্থক্য বাইট প্যাডিং এবং সারিবদ্ধকরণের কারণে। C/C++-এ প্রতিটি ডেটা টাইপের একটি সারিবদ্ধকরণের প্রয়োজনীয়তা রয়েছে। একটি প্রসেসর এর আর্কিটেকচারের প্রসেসিং শব্দের দৈর্ঘ্য থাকবে। একটি 32 বিট মেশিনে, প্রক্রিয়াকরণ শব্দের আকার হবে 4 বাইট বা 32 বিট। উদাহরণস্বরূপ, যদি আপনার struct-
থাকেউদাহরণ
#include <iostream> using namespace std; struct X { char b[3]; int c; }; int main() { char b[3]; int c; int total = sizeof(b) + sizeof(c); cout << sizeof(X) << endl; cout << total; }
আউটপুট
এটি আউটপুট দেয় −
8 7
আমার 64 বিট মেশিনে। কেন? এর কারণ স্ট্রাকটে, এটি গৃহস্থালির অ্যারে নেয় এবং এটি মেমরিতে রাখে কিন্তু এখন যদি এটি int রাখে যার আকার এটির পাশে 4 বাইট, সারিবদ্ধকরণের নিয়মগুলি ভঙ্গ হয়। তাই b এর শেষে অতিরিক্ত বাইটটি এড়িয়ে যায় এবং c 4 বাইট সীমানা থেকে শুরু হয়। এটি অতিরিক্ত আকারের কারণ।
আপনি https://en.wikipedia.org/wiki/-এ এই নিয়মগুলি সম্পর্কে আরও পড়তে পারেন ডেটা_স্ট্রাকচার_এলাইনমেন্ট।