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

C/C++ में स्ट्रक्चर का sizeof प्रत्येक मेंबर के sizeof के योग के बराबर क्यों नहीं होता?


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

केस 1

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

C/C++ में स्ट्रक्चर का sizeof प्रत्येक मेंबर के sizeof के योग के बराबर क्यों नहीं होता?

उदाहरण कोड

#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-बाइट्स स्पेस घेरता है।

C/C++ में स्ट्रक्चर का sizeof प्रत्येक मेंबर के sizeof के योग के बराबर क्यों नहीं होता?

उदाहरण कोड

#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-बाइट क्षेत्र में रखा जा सकता है। तो शॉर्ट के बाद एक पैडिंग मौजूद है लेकिन इंटीजर डेटा के बाद कोई पैडिंग आवश्यक नहीं है।

C/C++ में स्ट्रक्चर का sizeof प्रत्येक मेंबर के sizeof के योग के बराबर क्यों नहीं होता?

उदाहरण कोड

#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
  1. त्रिकोणीय माचिस संख्या (Triangular Matchstick Number) के लिए C/C++ प्रोग्राम? त्रिकोणीय माचिस संख्या (Triangular Matchstick Number) के लिए C/C++ प्रोग्राम?

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

  1. C/C++ प्रोग्राम: परवलय का शीर्ष, फोकस और नियता ढूंढना C/C++ प्रोग्राम: परवलय का शीर्ष, फोकस और नियता ढूंढना

    यहां हम देखेंगे कि C या C++ प्रोग्राम का उपयोग करके परवलय का शीर्ष, फोकस और नियता कैसे ढूंढें। इन पैरामीटर्स को प्राप्त करने के लिए हमें परवलय का सामान्य समीकरण चाहिए। सामान्य सूत्र है - y = a*x^2 + b*x + c a, b और c के मान दिए गए हैं। शीर्ष के लिए सूत्र - फोकस के लिए सूत्र - नियता के लिए सूत्र

  1. - विंडोज पर C++ के लिए शीर्ष IDE

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