संकलनकर्ता आम तौर पर संरेखण प्रतिबंध को पूरा करने के ढांचे पर गद्दी अनुगामी जब वे सरणियों में उपयोग किया जाता है सम्मिलित करें:पीछे चल गद्दी
struct AB {
struct {
uint16_t x;
uint8_t y;
} xy;
uint8_t z;
};
:
// Size 4, alignment 2
struct A {
uint16_t x;
uint8_t y;
// Padding 1 byte
};
// Size 6, alignment 2
struct B {
struct A xy;
uint8_t z;
// Padding 1 byte
};
अब इन का उपयोग कर आंतरिक संरचना के संयोजन पर विचार संरेखण प्रतिबंधों को तोड़ने के दौरान, 4 बाइट्स में फिट हो सकता है। इसके अलावा, आंतरिक संरचना xy
में कोई प्रकार नहीं है जिसका उपयोग कहीं और किया जा सकता है, इसलिए इसके लिए पिछली पैडिंग की आवश्यकता नहीं है।
पहलू यह है कि सदस्य xy
struct A
के साथ असंगत होगा, लेकिन वहाँ कोई कारण नहीं क्यों यह रूप में वे अलग प्रकार परिभाषाओं में हैं होना चाहिए।
क्या संकलक इस आकार अनुकूलन को करने की अनुमति देता है?
या, इसे अन्य तरीके से रखने के लिए, क्या मानक की आवश्यकता है कि बराबर सदस्यों के साथ 2 संरचनाओं का हमेशा बराबर लेआउट होगा?
मुझे लगता है कि संकलक को ऐसा करने की अनुमति दी जाएगी, क्योंकि मानक को पैड संरचनाओं के लिए कंपाइलर की आवश्यकता नहीं होती है। – qbt937