sizeof() দ্বারা নেওয়া একটি struct টাইপ উপাদানের আকার সবসময় প্রতিটি পৃথক সদস্যের আকারের সমান হয় না। কখনও কখনও কম্পাইলার সারিবদ্ধকরণ সমস্যা এড়াতে কিছু প্যাডিং যোগ করে। তাই আকার পরিবর্তন হতে পারে। প্যাডিং যোগ করা হয় যখন একটি স্ট্রাকচার মেম্বার পরে একটি বড় আকারের সদস্য বা স্ট্রাকচারের শেষে থাকে। বিভিন্ন কম্পাইলারের বিভিন্ন ধরণের সারিবদ্ধকরণ সীমাবদ্ধতা রয়েছে। সি স্ট্যান্ডার্ডে, মোট প্রান্তিককরণ কাঠামো বাস্তবায়নের উপর নির্ভর করে।
কেস 1
এই ক্ষেত্রে ডাবল z 8-বাইট লম্বা, যা x (4-বাইট) থেকে বড়। তাই আরেকটি 4-বাইট প্যাডিং যোগ করা হয়েছে। এছাড়াও শর্ট টাইপ ডেটা y এর মেমরিতে 2-বাইট স্পেস রয়েছে তাই অতিরিক্ত 6-বাইট প্যাডিং হিসাবে যোগ করা হয়েছে।
উদাহরণ কোড
#include <stdio.h> struct myStruct { int x; //Integer takes 4 bytes, and padding 4 bytes double z; //Size of double is 8-byte, no padding short int y; //Size of short is 2-byte, padding 6-bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
আউটপুট 2
Size of struct: 24
কেস 2
এই ক্ষেত্রে ডাবলটি প্রথমে ঢোকানো হয় এবং এটি 8-বাইট স্থান নেয়। এখন পূর্ণসংখ্যা x (4-বাইট) যোগ করা হয়েছে। তাই আরেকটি 4-বাইট স্পেস আছে। সংক্ষিপ্ত y যোগ করা হলে, এটি সেই অতিরিক্ত 4-বাইট স্থানটিতে স্থাপন করা যেতে পারে এবং মোট 16-বাইট স্থান দখল করে।
উদাহরণ কোড
#include <stdio.h> struct myStruct { double z; //Size of double is 8-byte, no padding int x; //Integer takes 4 bytes, and padding 4 bytes short int y; //Size of short is 2-byte, padding 6-bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
আউটপুট 2
Size of struct: 16
কেস 3
তৃতীয় ক্ষেত্রে এটি 16-বাইট মেমরি স্পেসও নেয়, তবে ব্যবস্থা ভিন্ন। প্রথম সদস্য দ্বিগুণ হওয়ায় প্রথমে এটি স্থাপন করা হয়, তারপর সংক্ষিপ্ত প্রকারের ডেটা যোগ করা হয়। এখন যখন পূর্ণসংখ্যা সন্নিবেশ করার চেষ্টা করছে, তখন এটি অবশিষ্ট 6-বাইট এলাকায় স্থাপন করা যেতে পারে। তাই সংক্ষিপ্ত হওয়ার পরে একটি প্যাডিং উপস্থিত থাকে তবে পূর্ণসংখ্যা ডেটার পরে কোনও প্যাডিংয়ের প্রয়োজন হয় না৷
উদাহরণ কোড
#include <stdio.h> struct myStruct { double z; //Size of double is 8-byte, no padding short int y; //Size of short is 2-byte, padding 6-bytes int x; //Integer takes 4 bytes, and padding 4 bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
আউটপুট 2
Size of struct: 16