विभाज्य है का जवाब देने से पहले करने के लिए गठबंधन किया जाना चाहिए, मैं विकी
डेटा संरचना संरेखण से आप कुछ डेटा देने के लिए चाहते हैं डेटा मेमोरी में डेटा व्यवस्थित और एक्सेस करने का तरीका है। इसमें दो अलग-अलग लेकिन संबंधित मुद्दे शामिल हैं: डेटा संरेखण और डेटा संरचना पैडिंग।
जब कोई आधुनिक कंप्यूटर मेमोरी एड्रेस से पढ़ता है या लिखता है, तो यह शब्द के आकार के हिस्सों में ऐसा करेगा (उदाहरण के लिए 32-बिट सिस्टम पर 4 बाइट भाग)। डेटा संरेखण का मतलब है कि डेटा आकार के कुछ एकाधिक के बराबर मेमोरी ऑफसेट पर डेटा डालना, जो सीपीयू को मेमोरी को संभालने के तरीके के कारण सिस्टम के प्रदर्शन को बढ़ाता है।
डेटा संरेखित करने के लिए, यह पिछले डेटा संरचना के अंत और अगले की शुरुआत है, जो डेटा संरचना गद्दी है के बीच कुछ व्यर्थ बाइट्स सम्मिलित करने के लिए आवश्यक हो सकता है।
जीसीसी संरचना पैडिंग से बचने के लिए सुविधा प्रदान करता है। यानी कुछ मामलों में इस अर्थहीन बाइट से बचने के लिए। निम्नलिखित संरचना
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}sSampleStruct;
sizeof(sSampleStruct)
पर विचार 12 के बजाय संरचना गद्दी की वजह से 8. किया जाएगा। डिफ़ॉल्ट रूप से, 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)))
का उपयोग विशेष रूप से (एक्स) आकार गद्दी जोर देते हैं करने के लिए कर सकते हैं। एक्स दो की शक्ति होना चाहिए।here
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}__attribute__((packed, aligned(1))) sSampleStruct;
संदर्भ लें तो ऊपर निर्दिष्ट जीसीसी विशेषता संरचना गद्दी अनुमति नहीं है। तो आकार 8 बाइट होगा। //gcc.gnu:
आप सभी संरचनाओं के लिए भी ऐसा ही करना चाहते हैं, बस हम संरेखण मूल्य #pragma
#pragma pack(push, 1)
//Structure 1
......
//Structure 2
......
#pragma pack(pop)
का उपयोग कर यह एक [ "प्रकार विशेषता"] (http है ढेर धक्का कर सकते हैं। संगठन/onlinedocs/gcc/type-Attributes.html) .. (मुझे यह Google में "सी विशेषता पैक" के साथ मिला। निश्चित रूप से अन्य कम से कम अच्छे कर सकते हैं!) –
देखें [यह प्रश्न] (http: // stackoverflow। कॉम/क्यू/8568432/827263) - हालांकि 'गठबंधन (4)' के साथ आपको शायद चिंता करने की ज़रूरत नहीं है। –