উত্তর দেওয়ার আগে, আমি আপনাকে উইকি থেকে কিছু তথ্য দিতে চাই
ডেটা স্ট্রাকচার অ্যালাইনমেন্টটি কম্পিউটার মেমোরিতে ডেটা সাজানো এবং অ্যাক্সেস করার উপায়। এটি দুটি পৃথক তবে সম্পর্কিত সমস্যা নিয়ে গঠিত: ডেটা প্রান্তিককরণ এবং ডেটা স্ট্রাকচার প্যাডিং ।
একটি আধুনিক কম্পিউটার যখন মেমরির ঠিকানা থেকে পাঠ করে বা লিখতে থাকে, তখন এটি শব্দ আকারের খণ্ডে (উদাহরণস্বরূপ 32-বিট সিস্টেমে 4 বাইট অংশ) এটি করবে। ডেটা প্রান্তিককরণের অর্থ হ'ল মেমরি অফসেটে শব্দের আকারের কয়েকটি একাধিক সমান ডেটা স্থাপন করা, যা সিপিইউ মেমরি পরিচালনা করে এমনভাবে সিস্টেমের কর্মক্ষমতা বাড়ায়।
ডেটা সারিবদ্ধ করার জন্য, শেষ ডেটা স্ট্রাকচারের সমাপ্তি এবং পরবর্তীটির সূচনার মধ্যে কিছু অর্থহীন বাইট সন্নিবেশ করা প্রয়োজন, যা ডেটা স্ট্রাকচার প্যাডিং ।
জিসিসি স্ট্রাকচার প্যাডিং অক্ষম করতে কার্যকারিতা সরবরাহ করে। অর্থাত্ কিছু ক্ষেত্রে এই অর্থহীন বাইটগুলি এড়াতে। নিম্নলিখিত কাঠামো বিবেচনা করুন:
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}sSampleStruct;
sizeof(sSampleStruct)
স্ট্রাকচার প্যাডিংয়ের কারণে 8 এর চেয়ে 12 হবে। ডিফল্টরূপে, X86-তে কাঠামোগুলি 4-বাইট প্রান্তিককরণে প্যাড করা হবে:
typedef struct
{
char Data1;
//3-Bytes Added here.
int Data2;
unsigned short Data3;
char Data4;
//1-byte Added here.
}sSampleStruct;
আমরা __attribute__((packed, aligned(X)))
নির্দিষ্ট (এক্স) আকারের প্যাডিং জোর করতে ব্যবহার করতে পারি । এক্স দুটি শক্তির হওয়া উচিত। পড়ুন এখানে
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}__attribute__((packed, aligned(1))) sSampleStruct;
সুতরাং উপরে উল্লিখিত জিসিসি বৈশিষ্ট্যটি কাঠামোর প্যাডিংয়ের অনুমতি দেয় না। সুতরাং আকার 8 বাইট হবে।
আপনি যদি সমস্ত কাঠামোর জন্য একই কাজ করতে চান তবে কেবল আমরা অ্যালাইনমেন্ট মানটি স্ট্যাক করে চাপতে পারি #pragma
#pragma pack(push, 1)
//Structure 1
......
//Structure 2
......
#pragma pack(pop)