स्ट्रक्ट के लिए 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 बिट मशीन पर। ऐसा क्यों है? क्योंकि स्ट्रक्ट में, यह char सरणी लेता है और इसे मेमोरी में रखता है लेकिन अब यदि यह इसके बगल में int रखता है जिसका आकार 4 बाइट्स है, तो अलाइनमेंट के नियमों का उल्लंघन होता है। इसलिए b के अंत में अतिरिक्त बाइट को छोड़ दिया जाता है और c 4 बाइट बाउंड्री से शुरू होता है। इससे अतिरिक्त आकार होता है।
आप इन नियमों के बारे में https://en.wikipedia.org/wiki/Data_structure_alignment पर और पढ़ सकते हैं।