C++ Academy · पाठ

स्टैक आवंटन

स्वचालित संग्रहण कैसे काम करता है, समझें

पाठ 1, कुल 4 में से13 चरण

स्टैक आवंटन, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्वचालित भंडारण

स्थानीय चर स्वचालित भंडारण में रहते हैं, जिसे आमतौर पर स्टैक कहा जाता है। निष्पादन उनके दायरे में प्रवेश करते ही वे बनाए जाते हैं और दायरे से बाहर निकलते ही नष्ट हो जाते हैं।

#include <iostream>

int main() {
    int x = 42;          // on the stack
    double pi = 3.14;    // on the stack
    std::cout << x << " " << pi << "\n";
}

स्टैक बढ़ता और घटता है

हर फ़ंक्शन कॉल अपने स्थानीय चरों वाला स्टैक फ़्रेम रखता है। फ़ंक्शन के लौटने पर फ़्रेम हटा दिया जाता है और स्थानीय चर समाप्त हो जाते हैं — किसी मैन्युअल सफ़ाई की आवश्यकता नहीं होती।

#include <iostream>

void greet() {
    int local = 7;          // pushed on call
    std::cout << local << "\n";
}                            // popped on return

int main() { greet(); }

LIFO क्रम

स्टैक Last In, First Out क्रम का पालन करता है। सबसे हाल में बनाया गया स्थानीय चर, दायरा समाप्त होने पर सबसे पहले नष्ट होता है।

#include <iostream>

int main() {
    int a = 1;
    {
        int b = 2;   // created after a
        std::cout << b << "\n";
    }                // b destroyed first
    std::cout << a << "\n";
}

तेज़ और किफ़ायती

स्टैक आवंटन बहुत तेज़ होता है: इसमें केवल स्टैक पॉइंटर को आगे बढ़ाना पड़ता है। मुक्त स्मृति खोजने या हीप की तरह हिसाब रखने की आवश्यकता नहीं होती।

दायरा जीवनकाल निर्धारित करता है

स्टैक ऑब्जेक्ट केवल उसी ब्लॉक के भीतर जीवित रहता है, जहाँ उसे घोषित किया गया है। नेस्टेड ब्लॉक का अपना अलग दायरा होता है।

#include <iostream>

int main() {
    for (int i = 0; i < 3; ++i) {
        int square = i * i;   // recreated each iteration
        std::cout << square << "\n";
    }
}

सीमित आकार

स्टैक का निश्चित और सीमित आकार होता है (अक्सर कुछ मेगाबाइट)। स्टैक पर बहुत बड़े सरणी आवंटित करने से स्टैक ओवरफ़्लो क्रैश हो सकता है।

// Risky: a large fixed array on the stack
int big[1000000];   // may overflow the stack

स्टैक पता लौटाना एक बग है

किसी स्थानीय चर का पॉइंटर या संदर्भ कभी न लौटाएँ। फ़ंक्शन के लौटने के बाद वह भंडारण समाप्त हो जाता है और पॉइंटर डैंगलिंग स्थिति में रहता है।

int* bad() {
    int local = 5;
    return &local;   // BUG: local dies here
}

बड़े ऑब्जेक्ट्स को रेफ़रेंस द्वारा पास करें

बड़े ऑब्जेक्ट्स को स्टैक पर कॉपी करना व्यर्थ है। कॉपी से बचने और स्टैक का उपयोग कम रखने के लिए उन्हें const& द्वारा पास करें।

#include <string>

void print(const std::string& s) {  // no copy
    // use s
}

स्टैक ऑब्जेक्ट्स के लिए डिलीट आवश्यक नहीं

कंपाइलर उनके जीवनकाल को स्वचालित रूप से प्रबंधित करता है, इसलिए स्टैक वेरिएबल पर कभी भी delete न चलाएँ।

#include <iostream>

int main() {
    int n = 10;
    // delete &n;   // ERROR: not heap-allocated
    std::cout << n << "\n";
}

स्टैक पर ऐरे

ज्ञात लंबाई वाले निश्चित आकार के ऐरे स्टैक पर रहते हैं और दायरा समाप्त होने पर स्वचालित रूप से मुक्त हो जाते हैं।

#include <iostream>

int main() {
    int values[3] = {10, 20, 30};
    for (int v : values) std::cout << v << "\n";
}

स्टैक को कब प्राथमिकता दें

छोटे, कम समय तक रहने वाले ऐसे ऑब्जेक्ट्स के लिए स्टैक को प्राथमिकता दें जिनका आकार कंपाइल समय पर ज्ञात हो। यह तेज़ और स्वयं-सफ़ाई करने वाला होता है — हीप का उपयोग तभी करें जब वास्तव में उसकी आवश्यकता हो।

त्वरित जाँच

स्टैक आवंटन की अपनी समझ का परीक्षण करें।

पुनरावलोकन

आपने सीखा कि स्टैक आवंटन दायरे से जुड़े स्वचालित स्टोरेज का उपयोग करता है: वेरिएबल प्रवेश पर बनाए जाते हैं और निकास पर LIFO क्रम में नष्ट किए जाते हैं। यह तेज़, स्वयं-सफ़ाई करने वाला और आकार में सीमित होता है। लोकल वेरिएबल्स के पते कभी वापस न करें और स्टैक ऑब्जेक्ट्स पर कभी delete न चलाएँ।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “स्टैक आवंटन” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “स्टैक आवंटन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“स्टैक आवंटन” में मैं क्या सीखूँगा?

स्वचालित संग्रहण कैसे काम करता है, समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“स्टैक आवंटन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. स्टैक आवंटन
  2. new/delete से हीप आवंटन
  3. ऑब्जेक्ट का जीवनकाल
  4. सामान्य मेमोरी बग
← C++ Academy पर वापस जाएँ