Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी/सी++ में प्रत्येक सदस्य के आकार के योग के बराबर संरचना के लिए आकार क्यों नहीं है?

आकार () द्वारा लिए गए संरचना प्रकार तत्व का आकार हमेशा प्रत्येक व्यक्तिगत सदस्य के आकार के बराबर नहीं होता है। संरेखण मुद्दों से बचने के लिए कभी-कभी संकलक कुछ पैडिंग जोड़ते हैं। तो आकार बदल सकता है। पैडिंग तब जोड़ी जाती है जब एक संरचना सदस्य के बाद एक बड़ा आकार वाला सदस्य या संरचना के अंत में होता है। विभिन्न कंपाइलर में विभिन्न प्रकार की संरेखण बाधाएं होती हैं। सी मानक में, कुल संरेखण संरचना कार्यान्वयन पर निर्भर करती है।

केस 1

इस मामले में डबल z 8-बाइट लंबा है, जो x (4-बाइट) से बड़ा है। तो एक और 4-बाइट पैडिंग जोड़ा जाता है। साथ ही शॉर्ट टाइप डेटा y में मेमोरी में 2-बाइट स्पेस होता है इसलिए अतिरिक्त 6-बाइट्स को पैडिंग के रूप में जोड़ा जाता है।

सी/सी++ में प्रत्येक सदस्य के आकार के योग के बराबर संरचना के लिए आकार क्यों नहीं है?

उदाहरण कोड

#include <stdio.h>
struct myStruct {
   int x; //Integer takes 4 bytes, and padding 4 bytes
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

आउटपुट 2

Size of struct: 24

केस 2

इस मामले में पहले डबल डाला जाता है, और इसमें 8-बाइट स्पेस लगता है। अब पूर्णांक x (4-बाइट) जोड़ा गया है। तो एक और 4-बाइट स्पेस है। जब छोटा y जोड़ा जाता है, तो उसे उस अतिरिक्त 4-बाइट स्थान में रखा जा सकता है और कुल 16-बाइट स्थान घेरता है।

सी/सी++ में प्रत्येक सदस्य के आकार के योग के बराबर संरचना के लिए आकार क्यों नहीं है?

उदाहरण कोड

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   int x; //Integer takes 4 bytes, and padding 4 bytes
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

आउटपुट 2

Size of struct: 16

केस 3

तीसरे मामले में यह 16-बाइट मेमोरी स्पेस भी लेता है, लेकिन व्यवस्था अलग है। चूंकि पहला सदस्य डबल होता है तो उसे पहले रखा जाता है, फिर शॉर्ट टाइप डेटा जोड़ा जाता है। अब जब पूर्णांक डालने का प्रयास कर रहा है, तो इसे शेष 6-बाइट क्षेत्र में रखा जा सकता है। तो एक पैडिंग शॉर्ट के बाद मौजूद है लेकिन पूर्णांक डेटा के बाद किसी पैडिंग की आवश्यकता नहीं है।

सी/सी++ में प्रत्येक सदस्य के आकार के योग के बराबर संरचना के लिए आकार क्यों नहीं है?

उदाहरण कोड

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
   int x; //Integer takes 4 bytes, and padding 4 bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}

आउटपुट 2

Size of struct: 16

  1. त्रिकोणीय माचिस की तीली संख्या के लिए C/C++ प्रोग्राम?

    एक त्रिभुज जो माचिस की तीलियों का उपयोग करके बनाया जाता है, एक समबाहु त्रिभुज बनाने की व्यवस्था करता है, इसे त्रिभुजाकार माचिस की संख्या कहा जाता है। त्रिकोणीय माचिस की तीलियों की संख्या माचिस की तीलियों को त्रिभुज बनाने के लिए आवश्यक है। इस समस्या में, हमारे पास संख्या एक माचिस की तीली का तल है, X

  1. एक परवलय के शीर्ष, फोकस और निर्देश को खोजने के लिए C/C++ प्रोग्राम?

    यहां हम देखेंगे कि सी या सी ++ प्रोग्राम का उपयोग करके परवलय के वर्टेक्स, फोकस डायरेक्ट्रिक्स को कैसे खोजें। इन मापदंडों को प्राप्त करने के लिए हमें एक परवलय के सामान्य समीकरण की आवश्यकता होती है। सामान्य सूत्र है - 𝑦 = 𝑎𝑥2 + 𝑏𝑥 + 𝑐 a, b और c के मान दिए गए हैं। शीर्ष के लिए सूत्र -

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। यहां विंडो के लिए सर्वश्रेष्ठ C/C++ IDE की सू