जब मैं इस तरह के संघ के आकार को मुद्रित करता हूं:मेरे यूनियन का आकार मुझे अपेक्षा से बड़ा क्यों है?
union u {
char c[5];
int i;
} un;
इसका उपयोग कर:
int _tmain(int argc, _TCHAR* argv[])
{
printf("size of union = %d ",sizeof(un));
return 0;
}
मुझे विजुअल सी ++ का उपयोग करके 8 का उत्तर मिलता है, लेकिन मुझे उम्मीद है 5. क्यों?
ठीक है, उसी उदाहरण के लिए, मैंने ऐसा कुछ किया:
int i1 = 0x98761234;
un.i = i1;
printf("\n un.c[0] = %x ",un.c[0]);
printf("\n un.c[1] = %x ",un.c[1]);
printf("\n un.c[2]= %x ",un.c[2]);
printf("\n un.c[3] = %x ",un.c[3]);
printf("\n un.c[4] = %x ",un.c[4]);
printf("size of union = %d ",sizeof(un));
मुझे
un.c[0] = 34;
un.c[1] = 12;
un.c[2] = 76;
un.c[3] = ffffff98;
जैसे परिणाम मिल गए हैं un.c [3]
पर 6fs क्यों हैं
मानते हुए 4 बाइट पूर्णांकों के लिए कुछ बाइट्स कहते हैं, सबसे बड़ा सदस्य सी, जो 5 बाइट्स है। संकलक पैडिंग जोड़कर इसे 8 तक बढ़ाता है। यदि सिस्टम 8-बाइट पूर्णांक का उपयोग कर रहा है, तो 8 का उपयोग यूनियन आकार के लिए किया जाता है। –
@ ब्रायन मैंने कुछ जवाब स्पष्ट रूप से इंगित करने के लिए "सबसे बड़ा सदस्य प्रकार" पर टिप्पणी करने से पहले ही मेरा जवाब बदल दिया। –
मुझे पता नहीं, मुझे अभी भी नहीं लगता कि आपका उत्तर स्पष्ट या सही है। आप कहते हैं कि सबसे बड़ा सदस्य एक int है, लेकिन यह नहीं है। यह 5 वर्णों की एक सरणी है। चूंकि 5> 4 यह मूल शब्द आकार के अगले एकाधिक तक चलता है, जो इसे बनाता है 8. –