"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C में वेरिएबल-लेंथ एरेज़ (VLA) स्टैक पर कैसे काम करता है?

C में वेरिएबल-लेंथ एरेज़ (VLA) स्टैक पर कैसे काम करता है?

2024-12-22 को प्रकाशित
ब्राउज़ करें:662

How Do Variable-Length Arrays (VLA) in C Work on the Stack?

स्टैक पर डायनामिक ऐरे आकार

सी में वेरिएबल-आकार ऐरे (वीएलए) रनटाइम पर एक ऐरे के आकार को निर्दिष्ट करने की अनुमति देते हैं मॉलोक या नई जैसी गतिशील आवंटन तकनीकों का सहारा लिए बिना। यह एक निश्चित आकार के साथ सरणी घोषित करने के पारंपरिक दृष्टिकोण के विपरीत है।

आपके द्वारा प्रदान किया गया कोड रनटाइम पर निर्धारित आकार के साथ एक सरणी घोषित करने के मानदंडों को पूरा करता है:

int main(int argc, char **argv) {
    size_t size;
    cin >> size;
    int array[size];
    // ...
}

कंपाइलर समर्थन

इस कोड की वैधता वीएलए के लिए कंपाइलर के समर्थन पर निर्भर करती है। जबकि C99 मानक में VLA शामिल है, यह एक अनिवार्य सुविधा नहीं है। हालाँकि, जीसीसी सहित कई कंपाइलर वैकल्पिक एक्सटेंशन के रूप में वीएलए का समर्थन करते हैं। सरणी की आवश्यक मेमोरी. यह उसी तरह है जैसे यह स्टैक पर नियमित चर और सरणियों के लिए स्थान आवंटित करता है।

फायदे

वीएलए ओवरहेड और जटिलताओं के बिना सरणियों को आवंटित करने का एक सुविधाजनक तरीका प्रदान करता है गतिशील स्मृति आवंटन की. यह विशेष रूप से तब उपयोगी होता है जब रनटाइम तक सरणी का आकार ज्ञात नहीं होता है। सरणी घोषित होने से पहले पता होना चाहिए।

आवंटित मेमोरी को मुफ्त की तरह स्पष्ट रूप से हटाया नहीं जा सकता है। सरणी का जीवनकाल उस ब्लॉक तक ही सीमित है जिसमें इसे घोषित किया गया है। यदि आकार को प्रभावी ढंग से नियंत्रित नहीं किया जाता है तो अतिप्रवाह समस्याएँ।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3