जवाब देने से पहले मैं आपको विकी का कुछ डेटा देना चाहूंगा
डेटा संरचना संरेखण वह तरीका है जिससे डेटा को कंप्यूटर मेमोरी में व्यवस्थित और एक्सेस किया जाता है। इसमें दो अलग-अलग लेकिन संबंधित मुद्दे होते हैं: डेटा संरेखण और डेटा संरचना पैडिंग ।
जब एक आधुनिक कंप्यूटर मेमोरी एड्रेस से पढ़ता है या लिखता है, तो यह शब्द आकार के विखंडू में ऐसा करेगा (जैसे कि 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)))
विशेष (X) आकार के पैडिंग को जोर देने के लिए उपयोग कर सकते हैं । X दो की शक्तियाँ होनी चाहिए। यहाँ देखें
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}__attribute__((packed, aligned(1))) sSampleStruct;
इसलिए उपर्युक्त gcc विशेषता संरचना को पैडिंग की अनुमति नहीं देती है। तो आकार 8 बाइट्स होगा।
यदि आप सभी संरचनाओं के लिए समान करना चाहते हैं, तो बस हम संरेखण मूल्य को स्टैक का उपयोग करके धक्का दे सकते हैं #pragma
#pragma pack(push, 1)
//Structure 1
......
//Structure 2
......
#pragma pack(pop)