sizeof() द्वारा लिया गया स्ट्रक्चर टाइप एलिमेंट का आकार हमेशा प्रत्येक व्यक्तिगत मेंबर के आकार के योग के बराबर नहीं होता। कभी-कभी कंपाइलर्स अलाइनमेंट मुद्दों से बचने के लिए कुछ पैडिंग जोड़ देते हैं। इसलिए आकार बदल सकता है। पैडिंग तब जोड़ी जाती है जब एक स्ट्रक्चर मेंबर के बाद बड़ा आकार वाला मेंबर आता है या स्ट्रक्चर के अंत में। अलग-अलग कंपाइलर के अलग-अलग अलाइनमेंट प्रतिबंध होते हैं। C स्टैंडर्ड में, कुल अलाइनमेंट स्ट्रक्चर कार्यान्वयन पर निर्भर करता है।
केस 1
इस केस में double z 8-बाइट लंबा है, जो x (4-बाइट) से बड़ा है। इसलिए 4-बाइट की अतिरिक्त पैडिंग जोड़ी जाती है। साथ ही शॉर्ट टाइप डेटा y की मेमोरी में 2-बाइट स्पेस होती है इसलिए अतिरिक्त 6-बाइट्स पैडिंग के रूप में जोड़े जाते हैं।

उदाहरण कोड
#include <stdio.h>
struct myStruct {
int x; // इंटीजर 4 बाइट्स लेता है, और पैडिंग 4 बाइट्स
double z; // डबल का आकार 8-बाइट, कोई पैडिंग नहीं
short int y; // शॉर्ट का आकार 2-बाइट, पैडिंग 6-बाइट्स
};
main() {
printf("Size of struct: %d", sizeof(struct myStruct));
}
आउटपुट 1
Size of struct: 24
केस 2
इस केस में double पहले डाला जाता है, और यह 8-बाइट्स स्पेस लेता है। अब इंटीजर x (4-बाइट) जोड़ा जाता है। तो वहां 4-बाइट की अतिरिक्त स्पेस है। जब शॉर्ट y जोड़ा जाता है, तो इसे उस अतिरिक्त 4-बाइट स्पेस में रखा जा सकता है और कुल 16-बाइट्स स्पेस घेरता है।

उदाहरण कोड
#include <stdio.h>
struct myStruct {
double z; // डबल का आकार 8-बाइट, कोई पैडिंग नहीं
int x; // इंटीजर 4 बाइट्स लेता है, और पैडिंग 4 बाइट्स
short int y; // शॉर्ट का आकार 2-बाइट, पैडिंग 6-बाइट्स
};
main() {
printf("Size of struct: %d", sizeof(struct myStruct));
}
आउटपुट 2
Size of struct: 16
केस 3
तीसरे केस में यह भी 16-बाइट मेमोरी स्पेस लेता है, लेकिन व्यवस्था अलग है। चूंकि पहला मेंबर double है तो यह पहले रखा जाता है, फिर शॉर्ट टाइप डेटा जोड़ा जाता है। अब जब इंटीजर डालने की कोशिश करता है, तो इसे शेष 6-बाइट क्षेत्र में रखा जा सकता है। तो शॉर्ट के बाद एक पैडिंग मौजूद है लेकिन इंटीजर डेटा के बाद कोई पैडिंग आवश्यक नहीं है।

उदाहरण कोड
#include <stdio.h>
struct myStruct {
double z; // डबल का आकार 8-बाइट, कोई पैडिंग नहीं
short int y; // शॉर्ट का आकार 2-बाइट, पैडिंग 6-बाइट्स
int x; // इंटीजर 4 बाइट्स लेता है, और पैडिंग 4 बाइट्स
};
main() {
printf("Size of struct: %d", sizeof(struct myStruct));
}
आउटपुट 3
Size of struct: 16