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

C++ में स्टैक अनवाइंडिंग (Stack Unwinding)


यहां हम देखेंगे कि स्टैक अनवाइंडिंग का क्या अर्थ है। जब हम कुछ फंक्शन कॉल करते हैं, तो यह एड्रेस को कॉल स्टैक में संग्रहीत करता है, और फंक्शन से वापस आने के बाद, उस एड्रेस को पॉप आउट करता है जहां इसे छोड़ा गया था।

स्टैक अनवाइंडिंग एक प्रक्रिया है जहां रनटाइम पर फंक्शन कॉल स्टैक एंट्री को हटा दिया जाता है। स्टैक एलिमेंट्स को हटाने के लिए, हम एक्सेप्शन का उपयोग कर सकते हैं। यदि कोई एक्सेप्शन आंतरिक फंक्शन से फेंका जाता है, तो स्टैक की सभी एंट्री हटा दी जाती हैं, और मुख्य इन्वोकर फंक्शन पर वापस आ जाता है।

आइए एक उदाहरण के माध्यम से स्टैक अनवाइंडिंग का प्रभाव देखें।

उदाहरण कोड

#include <iostream> using namespace std; void function1() throw (int) { //यह फंक्शन एक्सेप्शन फेंकता है    cout<<"\n Entering into function 1";    throw 100;    cout<<"\n Exiting function 1"; } void function2() throw (int) { //यह फंक्शन फंक्शन 1 को कॉल करता है    cout<<"\n Entering into function 2";    function1();    cout<<"\n Exiting function 2"; } void function3() { // फंक्शन 2 को कॉल करने और फंक्शन 1 द्वारा फेंके गए एक्सेप्शन को संभालने के लिए फंक्शन    cout<<"\n Entering function 3 ";    try {       function2(); // फंक्शन 2 को निष्पादित करने का प्रयास करें    }    catch(int i) {       cout<<"\n Caught Exception: "<<i;    }    cout<<"\n Exiting function 3"; } int main() {    function3();    return 0; }

आउटपुट

Entering function 3 Entering into function 2 Entering into function 1 Caught Exception: 100 Exiting function 3

यहां हम देख सकते हैं कि कंट्रोल फंक्शन 3 की जानकारी संग्रहीत करता है, फिर फंक्शन 2 में प्रवेश करता है, और फिर फंक्शन 1 में। उसके बाद एक एक्सेप्शन होता है, इसलिए यह स्टैक से सभी जानकारी हटा देता है, और फिर से फंक्शन 3 पर वापस आ जाता है।

  1. - C++ में रोटेट फंक्शन

    मान लीजिए हमारे पास पूर्णांकों की एक सरणी A दी गई है और मान लें n सरणी A की लंबाई है। अब मान लें Bk सरणी A को k पोजीशन क्लॉक-वाइज घुमाकर प्राप्त की गई सरणी है। यहां रोटेशन को निम्नानुसार परिभाषित किया जा सकता है:F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1].अब F(0), F(1), ..., F(n-1) का अधिकत

  1. C++ STL में स्टैक (3.5) C++ STL में स्टैक (3.5)

    C++ STL में, स्टैक का उपयोग एक कंटेनर के रूप में किया जाता है जिसे LIFO संरचना के रूप में कार्यान्वित किया जाता है। LIFO का अर्थ है लास्ट इन फर्स्ट आउट। स्टैक को किताबों के ढेर के रूप में देखा जा सकता है जिसमें किताबें एक के ऊपर एक व्यवस्थित होती हैं और अंत में डाली गई किताब सबसे पहले हटाई जाएगी इसल

  1. - C++ में swap() फ़ंक्शन

    swap() फ़ंक्शन दो संख्याओं को स्वैप (अदला-बदली) करने के लिए उपयोग किया जाता है। तीसरे वेरिएबल की आवश्यकता नहीं होती। <algorithm> या <utility> हेडर में परिभाषित (C++11 से)। सिंटैक्स void swap(Type& a, Type& b); उदाहरण 1: मान द्वारा पास (मान बदलते नहीं) #include <bits/stdc++.