किसी संरचना के लिए sizeof और उस संरचना के प्रत्येक सदस्य के sizeof के योग के बीच का अंतर बाइट पैडिंग और संरेखण के कारण होता है। C/C++ में प्रत्येक डेटा प्रकार की संरेखण आवश्यकता होती है। एक प्रोसेसर में इसकी वास्तुकला की शब्द लंबाई प्रसंस्करण होगी। 32 बिट मशीन पर, प्रोसेसिंग शब्द का आकार 4 बाइट्स या 32 बिट होगा। उदाहरण के लिए, यदि आपके पास संरचना है -
उदाहरण
#include <iostream> using namespace std; struct X { char b[3]; int c; }; int main() { char b[3]; int c; int total = sizeof(b) + sizeof(c); cout << sizeof(X) << endl; cout << total; }
आउटपुट
यह आउटपुट देता है -
8 7
मेरी 64 बिट मशीन पर। ऐसा क्यों है? इसकी वजह यह है कि संरचना में, यह चार सरणी लेता है और इसे स्मृति में रखता है लेकिन अब अगर यह int रखता है जिसका आकार इसके आगे 4 बाइट्स है, तो संरेखण के नियमों का उल्लंघन किया जाता है। तो बी के अंत में अतिरिक्त बाइट छोड़ दिया जाता है और सी 4 बाइट सीमा से शुरू होता है। यह अतिरिक्त आकार का कारण बनता है।
आप इन नियमों के बारे में https://en.wikipedia.org/wiki/ . पर अधिक पढ़ सकते हैं डेटा_स्ट्रक्चर_संरेखण.