सी संरचनाओं में मेमोरी संरेखण: आकार विसंगति को समझना
सी संरचनाओं के साथ काम करते समय, मेमोरी संरेखण वास्तविक निर्धारण में महत्वपूर्ण भूमिका निभाता है स्मृति में संरचना का आकार. मेमोरी संरेखण से तात्पर्य मेमोरी पतों में डेटा संरचनाओं के प्लेसमेंट से है जो विशिष्ट सीमाओं द्वारा विभाजित होते हैं। यह कुशल डेटा एक्सेस और प्रदर्शन अनुकूलन सुनिश्चित करता है।
एक 32-बिट मशीन पर विचार करें जहां मेमोरी संरेखण आमतौर पर 4 बाइट्स पर सेट होता है। इस संदर्भ में, कई अहस्ताक्षरित लघु सदस्यों से बनी एक संरचना, जैसे:
typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;
किसी को इस संरचना की मेमोरी का आकार 8 बाइट्स (3 x 2 बाइट्स) होने की उम्मीद होगी। हालाँकि, sizeof(myStruct) ऑपरेटर केवल 6 बाइट्स लौटाता है। इस विसंगति को संरेखण आवश्यकता के लिए जिम्मेदार ठहराया जा सकता है।
पहले उदाहरण में, प्रत्येक लघु सदस्य 2 बाइट्स रखता है। चूँकि संरेखण सीमा 4 बाइट्स है, सदस्यों के बीच कोई पैडिंग नहीं डाली जाती है। इस प्रकार, कुल आकार 6 बाइट्स पर रहता है। अहस्ताक्षरित लघु v1; अहस्ताक्षरित संक्षिप्त v2; अहस्ताक्षरित संक्षिप्त v3; int मैं; } myStruct;
इस मामले में, int सदस्य को 4-बाइट संरेखण सीमा की आवश्यकता होती है। इस आवश्यकता को पूरा करना सुनिश्चित करने के लिए, अंतिम अहस्ताक्षरित लघु सदस्य (v3) और पूर्णांक सदस्य (i) के बीच पैडिंग के 2 बाइट्स डाले जाते हैं। इसके परिणामस्वरूप कुल 12 बाइट्स का आकार होता है (शॉर्ट्स में डेटा के 6 बाइट्स, पैडिंग के 2 बाइट्स और इंट में डेटा के 4 बाइट्स)।
typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3