Avatar ·

C++ में sizeof(संरचना) उसके सभी फील्ड्स के sizeof के योग के बराबर क्यों नहीं होता?

नमस्ते! मैंने C++ सीखना शुरू किया है और एक अजीब व्यवहार देखा। मेरे पास एक सरल संरचना है: ```cpp struct MyStruct { char c; // 1 बाइट int i; // 4 बाइट short s; // 2 बाइट }; ``` तार्किक रूप से, मैं उम्मीद करता हूँ कि इस संरचना का आकार 1 + 4 + 2 = 7 बाइट होगा। लेकिन जब मैं `sizeof(MyStruct)` प्रिंट करता हूँ, तो कंपाइलर 12 दिखाता है! ऐसा क्यों होता है? मैंने फील्ड्स के अलग-अलग क्रमों के साथ जाँच की, और आकार बदलता है। उदाहरण के लिए, अगर मैं `int` को पहले रखूँ, तो आकार कभी-कभी 8 हो जाता है। क्या यह कंपाइलर का बग है या मैं कुछ समझ नहीं पा रहा हूँ? कृपया समझाएँ कि C++ में संरचनाओं के लिए मेमोरी आवंटन वास्तव में कैसे काम करता है। <<>>

संरचना का आकार उसके फील्ड्स के योग से अधिक क्यों होता है?

नहीं, यह कंपाइलर का बग नहीं है। यह मेमोरी के साथ काम करने की एक विशेषता है, जिसे alignment (संरेखण) और padding (भराई) कहा जाता है। प्रोसेसर मेमोरी को बाइट दर बाइट नहीं पढ़ता — वह डेटा के ब्लॉक के साथ काम करता है, जिसका आकार आमतौर पर 4 या 8 होता है।