কম্পিউটার টিউটোরিয়াল

সি++-এ স্ট্যাক আনউইন্ডিং (Stack Unwinding)

এখানে আমরা দেখব স্ট্যাক আনউইন্ডিং (Stack Unwinding) এর অর্থ কী। যখন আমরা কিছু ফাংশন কল করি, তবে এটি কল স্টকে (call stack) অ্যাড্রেস সংরক্ষণ করে, এবং ফাংশন থেকে ফেরত আসার সময়, অ্যাড্রেসটি পপ আউট (pop out) করে সেখানে থেকে কাজ শুরু করে যেখানে থেকে ছেড়ে দিয়েছিল।

স্ট্যাক আনউইন্ডিং হল একটি প্রসেস যেখানে রানটাইমে ফাংশন কল স্টকের এন্ট্রিগুলো সরিয়ে ফেলা হয়। স্টাক এলিমেন্ট সরাতে আমরা এক্সেপশন (exceptions) ব্যবহার করতে পারি। যদি কোনো ইনার ফাংশন থেকে এক্সেপশন থ্রো (throw) করা হয়, তবে স্ট্যাকের সব এন্ট্রি সরিয়ে ফেলা হয় এবং মেইন ইনভোকার ফাংশন (main invoker function) এ রিটার্ন করা হয়।

একটি উদাহরণের মাধ্যমে স্ট্যাক আনউইন্ডিং এর ইফেক্ট দেখি।

উদাহরণ কোড

#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) { //এই ফাংশন ফাংশন ১ কল করে    cout<<"\n Entering into function 2";    function1();    cout<<"\n Exiting function 2"; } void function3() { //ফাংশন ২ কল করে, এবং ফাংশন ১ দ্বারা থ্রো করা এক্সেপশন হ্যান্ডেল করে    cout<<"\n Entering function 3 ";    try {       function2(); //ফাংশন ২ এক্সিকিউট করার চেষ্টা    }    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

এখানে দেখতে পাচ্ছি যে কন্ট্রোল function3-এর ইনফো স্টোর করে, তারপর function2-এ ঢুকçe, তারপর function1-এ। এরপর একটি এক্সেপশন ঘটে, তাই স্ট্যাক থেকে সব ইনফো সরিয়ে ফেলা হয় এবং আবার function3-এ ফেরত আসে।

  1. C++-এ রোটেট ফাংশন

  2. C++ STL-এ স্ট্যাক (Stack)

  3. C++-এ log() ফাংশন

  4. C++-এ swap() ফাংশন