हैलो सब,
मैं जानना चाहता हूं कि संघ पैडिंग का उपयोग करता है या नहीं?
यूनियन के आकार के बाद से सबसे बड़ा डेटा सदस्य आकार है, क्या अंत में पैडिंग हो सकती है?संघ में पैडिंग मौजूद है या नहीं
उत्तर
संघ जब हम आदिम प्रकार के साथ प्रयोग के अंदर यह
union
{
char c;
int x;
}
ऐसा लगता है जैसे कि यह गद्दी का उपयोग नहीं करता, क्योंकि सबसे बड़े आकार डेटा वैसे भी सीमा के अनुरूप किया जाता है।
लेकिन जब हम संघ के भीतर एक संरचना घोंसला करते हैं तो यह करता है।
union u
{
struct ss
{
char s;
int v;
}xx;
}xu;
यह आकार 8.
के परिणामस्वरूप अपने प्रश्न के लिए तो जवाब देने के गद्दी संघ में persent है।
उस स्थिति में, आपके पास पहले से ही 'struct' में पैडिंग है। –
जैसा कि डैनियल ने सुझाव दिया कि यह गलत है। आप संघ के पैडिंग के रूप में संरचना के पैडिंग का जिक्र कर रहे हैं जो भ्रामक है। – kadina
संघ के आकार के बाद से सबसे बड़ा डेटा सदस्य आकार
जरूरत है कि सच नहीं हो रहा है।
union Pad {
char arr[sizeof (double) + 1];
double d;
};
उस संघ का सबसे बड़ा सदस्य arr
पर विचार करें। लेकिन आमतौर पर, double
को चार या आठ बाइट्स के एकाधिक पर गठबंधन किया जाएगा (आर्किटेक्चर और double
के आकार पर निर्भर करता है)। कुछ आर्किटेक्चर पर, यह भी जरूरी है क्योंकि वे असाइन किए गए पढ़ने का समर्थन नहीं करते हैं।
तो sizeof (union Pad)
आमतौर पर sizeof (double) + 1
[आम तौर पर 64-बिट सिस्टम पर 16 = 2 * sizeof (double)
से बड़ा है, और या तो 16 या 12 32-बिट सिस्टम (8 बिट char
और 64-बिट double
साथ एक 32-बिट सिस्टम पर पर, आवश्यक double
के लिए संरेखण अभी भी केवल चार बाइट हो सकता है)]।
इसका मतलब है कि संघ में पैडिंग होना चाहिए, और इसे केवल अंत में रखा जा सकता है।
आम तौर पर, union
का आकार किसी भी सदस्य द्वारा आवश्यक सबसे बड़े संरेखण का सबसे छोटा बहुमत होगा जो सबसे बड़े सदस्य से छोटा नहीं है।
लेकिन जब हमारे पास यूनियन में अकेले char arr [sizeof (double) +1] है तो यह केवल आकार देता है: 9? – Dineshkumar
यह मानक द्वारा अनिवार्य नहीं है, एक कार्यान्वयन को पैडिंग जोड़ने की अनुमति है, लेकिन सामान्य रूप से (8-बाइट 'डबल' के साथ), हाँ, यह 9 का आकार देगा। –
क्या कोई यह दिखाता है कि यह उदाहरण दिखाएगा कि यह उदाहरण पैड अप? - पूछना क्योंकि मुझे नहीं लगता कि यहां पैड के लिए _any_ कारण है, ऐसा नहीं है कि दोनों सदस्यों के बीच जगह होने की आवश्यकता है, इसे केवल सबसे बड़ा चुनना चाहिए। – ideasman42
- 1. पोस्टग्रेएसक्यूएल में ट्रिगर मौजूद है या नहीं?
- 2. डेटाटेबल में पंक्ति मौजूद है या नहीं?
- 3. संघ या संघ के लिए, यह प्रश्न
- 4. विस्क्रिप्ट: विशिष्ट फ़ाइल मौजूद है या नहीं,
- 5. जांचें कि फ़ाइल मौजूद है या नहीं,
- 6. यदि मौजूद है या मौजूद है?
- 7. यदि सत्र मौजूद है या नहीं
- 8. बंडल "ApplicationSonataUserBundle" मौजूद नहीं है या यह सक्षम नहीं है
- 9. जो तेजी से है: संघ या Concat?
- 10. रेल में वैकल्पिक या सशर्त मॉडल संघ
- 11. डेटाकॉन्टेक्स्ट टेबल या दृश्य मौजूद है या नहीं,
- 12. पैकेज संकलन में बाईपास "तालिका या दृश्य मौजूद नहीं है"
- 13. फ़ोल्डर इनबॉक्स में मौजूद है या नहीं, तो
- 14. जांचें कि निर्देशिका में निर्देशिका मौजूद है या नहीं?
- 15. नामस्थान में टाइप या नेमस्पेस नाम 'DirectoryServices' मौजूद नहीं है?
- 16. जांचें कि संग्रहित प्रो डीबी में मौजूद है या नहीं?
- 17. क्या $ _SERVER ['HTTP_X_REQUESTED_WITH'] PHP में मौजूद है या नहीं?
- 18. जांचें कि डीबी में भूमिका मौजूद है या नहीं?
- 19. रेल में छवि मौजूद है या नहीं, यह कैसे जांचें?
- 20. std :: map में कोई तत्व मौजूद है या नहीं?
- 21. मैटलैब में कोई फ़ाइल मौजूद है या नहीं?
- 22. जांचें कि रेल में कोई लेआउट मौजूद है या नहीं?
- 23. जावा 8 स्ट्रीम में कोई डुप्लिकेट मौजूद है या नहीं?
- 24. वीबीस्क्रिप्ट में कोई पोस्ट सबमिट फ़ील्ड मौजूद है या नहीं?
- 25. जावा में संसाधन फ़ाइल मौजूद है या नहीं?
- 26. जावास्क्रिप्ट में कोई विंडो मौजूद है या नहीं?
- 27. चेक बॉक्स में कोई मान मौजूद है या नहीं,
- 28. जांचें कि बैग में कोई तत्व मौजूद है या नहीं?
- 29. जांचें कि NSDictionary में कुंजी मौजूद है या नहीं
- 30. Django में कोई टेम्पलेट मौजूद है या नहीं?
संक्षेप में, ** हाँ ** !! मेरे विंडोज सिस्टम पर, एक यूनियन को आकार देने के लिए गद्देदार है जो 'int', यानी ** 4 बाइट्स ** के आकार का एक बहु है। तो जब तक आप '#pragma पैक (1) 'का उपयोग करें, आकार के 3 बाइट वाले यूनियन को 4 बाइट्स उत्पन्न करने के लिए एक और बाइट के साथ गद्देदार किया जाएगा। एक प्रोग्राम लिखें और प्रश्न पोस्ट करने से पहले इसे आजमाएं। –
"एक यूनियन को आकार देने के लिए गद्देदार है जो एक int के आकार का एक बहु है, यानी 4 बाइट्स।" लेकिन इस मामले में यूनियन अब { चार ए; } ए; आकार 1 – akash
है यदि आपके मामले में कोई पैडिंग नहीं है। किसने कहा कि 'पैडिंग' हमेशा किया जाता है? जैसे डैनियल फिशर ने कहा, यह ** मानक द्वारा ** अनिवार्य ** नहीं है। –