उत्तर
मुझे लगता है कि आप संरचना का मतलब है और सख्त नहीं, लेकिन 32-बिट सिस्टम पर यह या तो 5 या 8 बाइट्स होगा, इस पर निर्भर करता है कि संकलक संरचना को पैडिंग कर रहा है या नहीं।
मुझे संदेह है कि आपको 'स्ट्र' के बजाय 'स्ट्रक्चर', 'सख्त' और 'char' का अर्थ है।
आकार कार्यान्वयन पर निर्भर करेगा। अधिकांश 32-बिट सिस्टम पर, यह पॉइंटर के लिए शायद 5 - 4 बाइट होगा, एक चार के लिए। मुझे विश्वास नहीं है कि संरेखण यहां खेलेंगे। यदि आपने 'सी' और 'बी' को बदल दिया है, तो आकार 8 बाइट तक बढ़ सकता है।
ठीक है, मैं इसे बाहर की कोशिश की (छ ++ 4.2.3, जी विकल्प के साथ) और मैं 8.
संरेखण * शायद * खेल में आ सकता है। – jop
यह आपके वास्तुकला और यह कैसे बुनियादी डेटा प्रकार व्यवहार करता है पर निर्भर करती है मिलता है। यह इस बात पर भी निर्भर करेगा कि सिस्टम को प्राकृतिक संरेखण की आवश्यकता है या नहीं।
सटीक मूल्य आकार (ए) है।
आप जोखिम भी ले सकते हैं और मान सकते हैं कि यह इस मामले में 2 से कम नहीं है और 16 से अधिक नहीं है।
हालांकि सिद्धांत में कोई ऊपरी सीमा नहीं है क्योंकि पॉइंटर्स के कार्यान्वयन और आकार संकलक विशिष्ट हैं बशर्ते वे मानक के अनुसार व्यवहार करें। – Skizz
कुछ अन्य उत्तरों के विपरीत, अधिकांश प्रणालियों पर, किसी भी अनुपस्थिति में, प्रगमा या कंपाइलर विकल्प, संरचना का आकार कम से कम 6 बाइट होगा और अधिकांश 32-बिट सिस्टम, 8 बाइट्स पर होगा। 64-बिट सिस्टम के लिए, आकार आसानी से 16 बाइट्स हो सकता है। संरेखण खेल में आता है; हमेशा। एक ही संरचना का आकार ऐसा होना चाहिए कि उन आकारों की एक सरणी आवंटित की जा सके और सरणी के अलग-अलग सदस्यों को प्रश्न में प्रोसेसर के लिए पर्याप्त रूप से गठबंधन किया गया हो। नतीजतन, अगर संरचना का आकार 5 था, जैसा कि अन्य ने अनुमान लगाया था, तो दो ऐसी संरचनाओं की एक सरणी 10 बाइट लंबी होगी, और दूसरे सरणी सदस्य में चार सूचक एक अजीब बाइट पर गठबंधन किया जाएगा, जो अधिकतर होगा प्रोसेसर) प्रदर्शन में एक बड़ी बाधा का कारण बनता है।
और पुराने 68k मैक पर, दुर्घटना! –
कारण मैंने अनुमान लगाया कि संरेखण का कोई प्रभाव नहीं होगा कि दोनों सदस्यों को उनके बीच पैडिंग के बिना ठीक से गठबंधन किया जाएगा। मुझे अंत में पैडिंग के लिए आकार के आकार की उम्मीद नहीं थी। मेरी परिकल्पना को प्रयोगात्मक रूप से अस्वीकार कर दिया गया है, जैसा कि मैंने अपने उत्तर में एक संपादन में उल्लेख किया था। –
#include <stdio.h>
typedef struct { char* c; char b; } a;
int main()
{
printf("sizeof(a) == %d", sizeof(a));
}
मुझे 32-बिट मशीन पर "sizeof (a) == 8" मिलता है। संरचना का कुल आकार पैकिंग पर निर्भर करेगा: मेरे मामले में, डिफ़ॉल्ट पैकिंग 4 है, इसलिए 'सी' 4 बाइट्स लेता है, 'बी' एक बाइट लेता है, जिससे 3 पैडिंग बाइट्स को अगले 4 में लाया जाता है : 8. आप इस पैकिंग को बदलने के लिए चाहते हैं, तो सबसे compilers यह बदलने के लिए एक रास्ता है, उदाहरण के लिए, MSVC पर:
#pragma pack(1)
typedef struct { char* c; char b; } a;
देता sizeof (एक) == 5. यदि आप ऐसा करते हैं, करने के लिए सावधान रहना होगा किसी लाइब्रेरी हेडर से पहले पैकिंग रीसेट करें!
यह सुनिश्चित करने के लिए कि यह काम करता है: printf ("sizeof (a) ==% d", (int) sizeof (ए)); ' –
@ थॉमसपैड्रॉन-मैककार्थी रादर 'printf ("% zu ", sizeof (a)) ' –
@ एच 2CO3: हाँ, यह भी एक आधुनिक पर्याप्त सी –
संरचना का आकार 32 बिट सिस्टम पर 8 बाइट्स होना चाहिए, ताकि संरचना का आकार 2 से अधिक हो जाए। यह संरचनाओं की एक सरणी घोषित होने पर व्यक्तिगत बाइट सीमाओं पर उपलब्ध व्यक्तिगत संरचनाएं बनाती है। यह अंत में 3 बाइट्स के साथ संरचना पैडिंग द्वारा हासिल किया जाता है।
यदि संरचना के पास चार के बाद घोषित सूचक था, तो यह आकार में 8 बाइट्स होगा लेकिन 3 बाइट पैडिंग को 4 बाइट पर पॉइंटर (जो 4 बाइट तत्व है) को रखने के लिए जोड़ा गया होगा पता सीमा
अंगूठे का नियम यह है कि तत्व ऑफसेट पर होना चाहिए जो उनके बाइट आकार के एकाधिक हैं और संरचना स्वयं आकार के होना चाहिए जो 2 का एक बहु है।
यह अपेक्षाकृत असामान्य है, लेकिन केवल चार सरणी वाली संरचना में एक अजीब आकार हो सकता है: 'असामान्य संरचना {char a [3]; चार बी [4]; }; 'किसी भी दुष्प्रभाव के बिना 7 का आकार हो सकता है। एक कंपाइलर अभी भी इसे 8 बाइट्स तक पैड कर सकता है, लेकिन ऐसा करने की कोई स्पष्ट आवश्यकता नहीं है। –
यदि आप इसे मैन्युअल रूप से गिनना चाहते हैं, तो संरचना का आकार संरेखण के लिए लेखांकन के बाद अपने प्रत्येक डेटा सदस्यों का आकार है। एक संरचना के लिए कोई जादू ओवरहेड बाइट्स नहीं है।
- 1. मुझे 2 डी सरणी का आकार कैसे मिल सकता है?
- 2. मुझे अधिकतम स्टैक आकार कैसे मिल सकता है?
- 3. मुझे जावा में भौतिक मेमोरी आकार कैसे मिल सकता है?
- 4. क्या मुझे स्ट्रक्चर फ़ील्ड का आकार मिल सकता है/o संरचना का एक उदाहरण बना रहा है?
- 5. मुझे कई भौगोलिक बिंदुओं का केंद्र कैसे मिल सकता है?
- 6. मुझे $ CATALINA_HOME का मूल्य कैसे मिल सकता है?
- 7. मुझे असेंबली का मजबूत नाम कैसे मिल सकता है?
- 8. मुझे छवि का प्रमुख रंग कैसे मिल सकता है?
- 9. मुझे एक महीने का आखिरी दिन कैसे मिल सकता है?
- 10. मुझे पथ का सही मामला कैसे मिल सकता है?
- 11. मुझे लटका फाइनलाइज़र कतार का कारण कैसे मिल सकता है?
- 12. मुझे diff एल्गोरिदम कहां मिल सकता है?
- 13. मुझे SilverlightUIAutomationHelper.dll कहां मिल सकता है?
- 14. SQLite में तालिका संरचना पर मुझे तेजी से अवलोकन कैसे मिल सकता है?
- 15. मुझे jsdom दस्तावेज़ीकरण कहां मिल सकता है?
- 16. मुझे एमडीबीजी कहां मिल सकता है?
- 17. मुझे नवीनतम माइक्रोसॉफ्ट.एक्सचेंज.WebServices.DLL कहां मिल सकता है?
- 18. मुझे my.cnf क्यों नहीं मिल सकता है?
- 19. एक संरचना सदस्य का आकार
- 20. क्या मुझे रेफरर मिल सकता है?
- 21. मुझे WSDL.exe कहां मिल सकता है?
- 22. मुझे पैकेज javax.media.opengl कहां मिल सकता है?
- 23. मुझे MysqlDumpSlow कमांड कहां मिल सकता है?
- 24. मुझे TableDiff.exe कहां मिल सकता है?
- 25. मुझे System.Linq.Dynamic dll कहां मिल सकता है?
- 26. मुझे libpq स्रोत कहां मिल सकता है?
- 27. मुझे एमएसपीईसी दस्तावेज कहां मिल सकता है?
- 28. मुझे GACUtil कहां मिल सकता है?
- 29. मुझे एडोब जार कहां मिल सकता है?
- 30. मुझे जॉग जार कहां मिल सकता है?
'sizeof (ए)' वैध सी नहीं है फिर भी यह सी ++ में मान्य होगा। – alk