گھر > نمائش > مواد

کمپیوٹر پروگرامنگ میں غیر فعال افعال کے اسٹیک فریموں کو تلاش کرنے کے لئے ڈسپلے رجسٹر یا ڈیٹا ڈھانچہ

Apr 22, 2017

اسٹیک کال کریں

کمپیوٹر سائنس میں ، ایک کال اسٹیک ایک اسٹیک ڈیٹا ڈھانچہ ہے جس میں کمپیوٹر پروگرام کے فعال ذیلی ادویات کے بارے میں معلومات ذخیرہ کرتی ہے . اس طرح کے اسٹیک پر عملدرآمد اسٹیک ، پروگرام اسٹیک ، کنٹرول اسٹیک ، رن ٹائم اسٹیک ، یا مشین اسٹیک کے طور پر بھی جانا جاتا ہے ، اور اکثر "اسٹیک" کو قصر کیا جاتا ہے. اگرچہ کال سٹیک کی دیکھ بھال بہت زیادہ سافٹ ویئر کے مناسب کام کے لئے اہم ہے، تو تفصیلات عام طور پر پوشیدہ اور خود کار طریقے سے اعلی درجے کی پروگرامنگ زبانوں میں ہوتی ہیں . بہت سے کمپیوٹر ہدایت کا تعین اساتذہ کو جوڑنے کے لئے مخصوص ہدایات فراہم کرتا ہے .

ایک کال اسٹیک کئی متعلقہ مقاصد کے لئے استعمال کیا جاتا ہے، لیکن اس کی اہم وجہ اس نقطہ نظر کو برقرار رکھنا پڑتا ہے جس میں ہر سرگرم ذیلی ریئٹائن کو کنٹرول کرنے پر قابو پانے کی ضرورت ہے جب یہ عمل ختم ہوجاتا ہے. ایک فعال ذیلی طبقہ یہ ہے جس کو بلایا گیا ہے لیکن ابھی تک اس عمل کو مکمل کرنے کے بعد ہی مکمل طور پر کال کرنے کے لۓ کنٹرول کیا جاسکتا ہے. کسی بھی سطح (ایک خصوصی کیس کے طور پر ریورسسرائیو) کے لئے subroutines کی اس طرح کی سرگرمیاں ہوسکتی ہیں، اس وجہ سے اسٹیک ڈھانچہ. اگر، مثال کے طور پر، ایک subroutine DrawSquare نے چار مختلف جگہوں سے ایک ذیلی DrawLine کو کال کرتی ہے، DrawLine کو یہ پتہ ہونا چاہیے کہ جب اس کے اعدام کو مکمل کیا جائے گا. اس کو پورا کرنے کے لئے، کال کی ہدایات کے بعد ایڈریس ، واپسی کا پتہ ، ہر کال کے ساتھ کال اسٹیک پر دھکا دیا جاتا ہے.


فہرست

[ چھپائیں ]


تفصیل [ ترمیم ]

چونکہ کال اسٹیک اسٹیک کے طور پر منظم کیا جاتا ہے ، کالر کو واپسی کے پتہ اسٹیک پر دھکا دیتا ہے، اور جس کا نام subroutine کہا جاتا ہے، جب یہ ختم ہوجاتا ہے، اسے واپس لیتا ہے یا کال اسٹیک سے واپسی ایڈریس کو لے جاتا ہے یا اس ایڈریس پر کنٹرول منتقل کرتا ہے. اگر کہا جاتا ہے کہ ایک subroutine نے ابھی تک کسی اور ذیلی مواد کا مطالبہ کیا ہے، تو یہ ایک دوسرے کی واپسی کا پتہ کال سٹیک پر دھکا دے گا، اور اسی طرح، پروگرام کے طور پر اسٹیکنگ اور غیر فعال کرنے کے بارے میں معلومات کا تعین کرے گا. اگر کال اسٹیک کے لئے مختص تمام جگہ دھکا دیتا ہے، تو اس کے نتیجے میں اسٹیک اوور بہاؤ کی غلطی ہوتی ہے، عام طور پر پروگرام حادثے کا سبب بنتا ہے. کال اسٹیک میں ذیلی میٹنگ کا اندراج شامل کرنا بعض اوقات "گھومنے" کہا جاتا ہے. بات چیت، اندراجات کو ہٹانا "ناپاک" ہے.

عموما بالکل ایک کال اسٹیک چل رہا ہے جو پروگرام (یا زیادہ درست طریقے سے، ایک عمل کے ہر کام یا دھاگے کے ساتھ) سے منسلک ہوتا ہے، اگرچہ سگنل ہینڈلنگ یا کوآپریٹیو ملٹی ماسک کے لئے اضافی اسٹاک تیار کیے جا سکتے ہیں چونکہ اس اہم سیاق و سباق میں صرف ایک ہی ہے، اس کو اسٹیک کے طور پر بھیجا جا سکتا ہے (واضح طور پر "کام کا")؛ تاہم، فارتھ پروگرامنگ زبان میں ڈیٹا اسٹیک یا پیرامیٹر سٹیک کال اسٹیک سے زیادہ واضح طور تک رسائی حاصل کی جاتی ہے اور عام طور پر اسٹیک کے طور پر بھیجا جاتا ہے (نیچے ملاحظہ کریں).

اعلی درجے کی پروگرامنگ کی زبانوں میں ، کال اسٹیک کی تفصیلات عام طور پر پروگرامر سے پوشیدہ ہیں. انہیں صرف افعال کے ایک سیٹ تک رسائی حاصل ہے، اور اسٹیک خود کو یاد نہیں. یہ abstraction کی ایک مثال ہے. دوسری جانب سے زیادہ سے زیادہ اسمبلی کی زبانیں ، پروگرامروں کو اسٹیک کو جوڑنے کے ساتھ شامل ہونے کی ضرورت ہوتی ہے. پروگرامنگ زبان میں اسٹیک کی اصل تفصیلات پر کمپائلر ، آپریٹنگ سسٹم ، اور دستیاب ہدایات سیٹ پر منحصر ہے.

کال اسٹیک کے افعال [ ترمیم ]

جیسا کہ اوپر بیان کیا گیا ہے، کال اسٹیک کا بنیادی مقصد واپسی پتوں کو ذخیرہ کرنا ہے . جب ایک سبسویٹین کہا جاتا ہے تو، اس ہدایت کا مقام (ایڈریس) جسے بعد میں اسے دوبارہ شروع کر سکتا ہے اسے کہیں محفوظ کیا جاسکتا ہے. واپسی ایڈریس کو بچانے کے لئے اسٹیک کا استعمال متبادل کالوں کے کنونشنوں پر اہم فوائد ہے. ایک یہ ہے کہ ہر کام کو اپنا اسٹیک حاصل ہوسکتا ہے، اور اس طرح ذیلی میٹھی ریفریجویٹ ہوسکتی ہے، یہ مختلف کاموں کو مختلف چیزوں کے ساتھ ساتھ ساتھ ساتھ فعال کیا جا سکتا ہے. ایک اور فائدہ یہ ہے کہ تلاوت خود کار طریقے سے حمایت کی جاتی ہے. جب ایک فنکشن خود کو دوبارہ بازیابی کرتا ہے تو، ایک واپسی کا پتہ فنکشن کے ہر ایکشن کے لئے ذخیرہ کرنے کی ضرورت ہے تاکہ بعد میں اس کی سرگرمی سے چالو کرنے کے لئے استعمال کیا جا سکے. اسٹیک ڈھانچے خود کار طریقے سے اس کی صلاحیت فراہم کرتے ہیں.

زبان، آپریٹنگ سسٹم، اور مشین ماحول پر منحصر ہے، کال اسٹیک اضافی مقاصد کی خدمت کرسکتا ہے، مثال کے طور پر:

مقامی ڈیٹا اسٹوریج


ایک ذیلی ریئینائن اکثر مقامی متغیرات کے اقدار کو ذخیرہ کرنے کے لئے میموری کی جگہ کی ضرورت ہوتی ہے ، متغیر صرف یہ ہے کہ فعال ذیلی میٹریٹر کے اندر ہی جانا جاتا ہے اور اس کے بعد قیمتوں کو برقرار رکھنے کے بعد برقرار نہ رہیں. اس جگہ کو آسانی سے اس جگہ کو فراہم کرنے کے لئے کافی کی طرف سے اسٹاک کے سب سے اوپر منتقل کرکے اس استعمال کے لئے جگہ مختص کرنے کے لئے آسان ہے. متحرک میموری مختص کے مقابلے میں یہ بہت تیز ہے، جس میں فضائی خلا کا استعمال ہوتا ہے . نوٹ کریں کہ ایک سبسویٹین کے ہر علیحدہ چالو مقامی لوگوں کے لئے اسٹیک میں اپنی الگ الگ جگہ بنتی ہے.


پیرامیٹر گزر


Subroutines اکثر ضرورت ہوتی ہے کہ پیرامیٹرز کے لئے اقدار کو ان کوڈ پر فراہم کی جاۓ جو ان کو فون کرتی ہے، اور یہ غیر معمولی نہیں ہے کہ ان پیرامیٹرز کے لئے جگہ کال سٹیک میں رکھی جاسکتی ہے. عموما اگر صرف چند چھوٹے پیرامیٹرز ہیں تو، پروسیسر رجسٹر استعمال کریں گے اقدار کو منتقل کرنے کے لئے، لیکن اگر اس سے نمٹنے کے مقابلے میں زیادہ پیرامیٹرز ہیں تو، میموری کی جگہ کی ضرورت ہوگی. کال اسٹیک ان پیرامیٹروں کے لئے ایک جگہ کے طور پر کام کرتا ہے، خاص طور سے جب سے ہر ایک میٹروپیٹین کو کال کرتا ہے، جس میں پیرامیٹرز کے لئے مختلف اقدار ہوں گے، ان اقدار کے لئے کال اسٹیک پر علیحدہ جگہ دی جائے گی.


تشخیص اسٹیک


ریاضی یا منطقی کارروائیوں کے لئے آپریشنز اکثر اکثر رجسٹرڈ ہوتے ہیں اور وہاں چلتے ہیں. تاہم، بعض صورتوں میں چلنے والے کسی مباحثہ کی گہرائی تک اسٹیک کیے جا سکتے ہیں، جس کا مطلب ہے کہ رجسٹر سے زیادہ کچھ استعمال ہونا چاہیے (یہ رجسٹریشن سپلنگ کا معاملہ ہے). اس طرح کے آپریٹرز کی اسٹیک، بجائے ایک آر پی این کیلکولیٹر میں ، تشخیص اسٹیک کہا جاتا ہے، اور کال اسٹیک میں جگہ پر قبضہ کر سکتا ہے.


موجودہ مثال کے لئے پوائنٹر


بعض چیزوں پر مبنی زبانوں (مثال کے طور پر، C ++اس پوائنٹر کو کام کے دلائل کے ساتھ ساتھ اسٹیک میں اسٹاک میں ذخیرہ کرتے ہیں. اس پوائنٹر پوائنٹ کے ساتھ منسلک کرنے کے لئے منسلک اعتراض مثال کے طور پر پوائنٹس.


subroutine سیاق و سباق کو شامل کرنا


کچھ پروگرامنگ زبانیں (مثال کے طور پر، پیسل اور اڈا ) نائب زیر التواء کے اعلامیے کی حمایت کرتے ہیں، جو بیرونی ضوابط کے دائرہ کار کے اندر ان کے منسلک معمولات، یعنی پیرامیٹرز اور مقامی متغیر تک رسائی حاصل کرنے کی اجازت دی جاتی ہے. اس طرح کے جامد تہذیب دوبارہ کر سکتے ہیں - ایک فنکشن کے اندر اعلان کردہ فنکشن کے اندر اعلان کردہ ایک فنکشن ... اس عمل کو ایک ذریعہ فراہم کرنا لازمی ہے جس کے ذریعہ کسی جامد گھوںسلا کی سطح پر ایک نامیاتی فنکشن ہر منسلک گھوںسلا سطح پر منسلک فریم کا حوالہ دے سکتا ہے. عام طور پر یہ حوالہ ایک پوائنٹر کی طرف سے نافذ شدہ فعل کے سب سے زیادہ فعال مثال کے فریم پر نافذ کیا جاتا ہے، جس میں "نیچے اسٹاک لنک" یا "جامد لنک" کہا جاتا ہے، اسے "متحرک لنک" سے الگ کر دیتا ہے جو فوری طور پر کالر کا حوالہ دیتا ہے. جس میں جامد والدین کی ضرورت نہیں ہے).


جامد لنک کے بجائے، منسلک جامد فریموں کے حوالہ جات کو ایک ڈسپلے کے صف میں جمع کیا جا سکتا ہے جو ایک ڈسپلے کے طور پر جانا جاتا ہے جسے مطلوبہ فریم کو تلاش کرنے کے لئے لاگو کیا جاتا ہے. معمول کی لیکسیکل گھوںسلا کی گہرائی ایک معروف مسلسل ہے، لہذا معمول کے ڈسپلے کا سائز مقرر کیا جاتا ہے. اس کے علاوہ، اس طرح کے سکوپوں کی تعداد پر گزرنے کے لئے جانا جاتا ہے، اس ڈسپلے میں انڈیکس بھی طے کی جاتی ہے. عام طور پر معمول کا ڈسپلے اس کے اپنے اسٹیک فریم میں واقع ہے، لیکن بروروس B6500 اس طرح کے ہارڈویئر میں ایک ڈسپلے کو نافذ کیا جس میں 32 جامد جزووں کی مدد کی گئی.


ڈسپلے اندراجوں کو سکوپ پر مشتمل ہونے سے انکار کیا جاتا ہے کالر کے ڈسپلے کے مناسب ضمیمہ سے. ایک اندرونی معمول جس کی تلاوت ہر دعوت کے لئے علیحدہ کال فریم پیدا کرتی ہے. اس صورت میں، تمام اندرونی معمول کے جامد لنکس ایک ہی بیرونی معمول کے سیاق و سباق پر اشارہ کرتے ہیں.


دیگر واپسی کی حالت


واپسی کے ایڈریس کے علاوہ، کچھ ماحول میں موجود دیگر مشین یا سافٹ ویئر کی حیثیتیں ہوسکتی ہیں جب ایک ذیلی ریئرنین کی واپسی ہوتی ہے. اس میں امتیاز کی سطح، استثناء سے ہینڈلنگ کی معلومات، ریاضی کے طریقوں، اور اسی طرح چیزوں میں شامل ہوسکتا ہے. اگر ضرورت ہو تو، یہ کال اسٹیک میں ذخیرہ ہوسکتا ہے جیسے واپسی ایڈریس ہے.


عام کال اسٹیک واپسی ایڈریس، مقامی اور پیرامیٹرز ( کال فریم کے طور پر جانا جاتا ہے) کے لئے استعمال کیا جاتا ہے. کچھ ماحول میں کال اسٹیک کو تفویض یا زیادہ کم افعال ہوسکتے ہیں. فورتھ پروگرامنگ زبان میں ، مثال کے طور پر، عام طور پر صرف واپسی کا پتہ، شمار لوپ پیرامیٹرز اور انڈیکسز، اور ممکنہ طور پر مقامی متغیر کال سٹیک (جس میں اس ماحول میں واپسی اسٹیک کا نام دیا جاتا ہے) کو محفوظ کیا جاتا ہے، اگرچہ کسی بھی ڈیٹا کو عارضی طور پر رکھا جا سکتا ہے یہاں تک کہ خاص واپسی اسٹیک ہینڈلنگ کا کوڈ استعمال کرتے ہوئے جب تک کالوں اور واپسی کی ضروریات کا احترام کیا جاتا ہے؛ پیرامیٹرز عام طور پر علیحدہ ڈیٹا اسٹیک یا پیرامیٹر سٹیک پر محفوظ کیا جاتا ہے ، عام طور پر فورتھ اصطلاحات میں اسٹیک کہا جاتا ہے اگرچہ اس کال اسٹیک ہے کیونکہ یہ عام طور سے مزید واضح طور پر رسائی حاصل ہوتی ہے. کچھ فوروں کو فلوٹ پوائنٹ کے پیرامیٹرز کے لئے تیسرے اسٹیک بھی ہے.

ساخت [ ترمیم ]

اسٹیک ترتیب کال کریں

ایک کال اسٹیک اسٹیک فریموں پر مشتمل ہے (جس میں بھی ایکٹیویشن ریکارڈ یا چالو کرنے کے فریم ) بھی شامل ہے. یہ مشین پر منحصر ہے اور ABI سے متعلق اعداد و شمار کے ڈھانچے ہیں جو subroutine ریاست کی معلومات پر مشتمل ہے. یہ ڈیٹا کبھی کبھی CFI (کال فریم انفارمیشن) کے طور پر کہا جاتا ہے. [1] ہر اسٹیک فریم ایک ذیلی میٹریوئن کو کال سے ملتا ہے جس سے ابھی تک واپسی کے ساتھ ختم نہ ہو. مثال کے طور پر، اگر DrawLine نامی ایک ذیلی DrawLine فی الحال چل رہا ہے، اس کو ذیلی DrawSquare ذریعہ بلایا جاتا ہے تو کال اسٹیک کا سب سے بڑا حصہ دائیں طرف کی تصویر کو دائیں طرف رکھا جا سکتا ہے.

اس طرح کی ایک آریگرام کسی بھی سمت میں تیار کی جاسکتی ہے جب تک سب سے اوپر کی جگہ کی جگہ، اور اسٹیک ترقی کی توحید، سمجھا جاتا ہے. اس کے علاوہ، آزادانہ طور پر اس سے، آرکیٹیکچرز مختلف ہیں کہ کال اسٹیک اعلی پتے یا کم پتوں کی طرف بڑھتے ہیں یا نہیں. ڈریگ کی منطق کو خطاب کرنے کی پسند سے آزاد ہے.

اس اسٹیک کے سب سے اوپر اسٹیک فریم موجودہ وقت میں معمول کے لئے ہے. اسٹیک فریم عام طور پر کم از کم مندرجہ ذیل اشیاء (دھکا حکم میں) شامل ہیں:

  • دلائل (پیرامیٹرز کی اقدار) معمول (اگر کوئی) گزر گئے ہیں؛

  • واپسی ایڈریس کو معمول کے کالر میں واپس آتی ہے (مثال کے طور پر DrawLine اسٹیک فریم میں، DrawSquare کے کوڈ میں ایک پتہ)؛ اور

  • معمول کے مقامی متغیر (اگر کوئی) کے لئے جگہ.

اسٹیک اور فریم پوائنٹس [ ترمیم ]

جب اسٹیک فریم سائز مختلف ہوسکتے ہیں، جیسے مختلف افعال کے درمیان یا کسی خاص تقریب کے انوائسز کے درمیان، اسٹیک سے ایک فریم پپنگ اسٹیک پوائنٹر کی ایک مقررہ کمی کا حامل نہیں ہے. فنکشن واپسی میں، اسٹیک پوائنٹر بجائے فریم پوائنٹر ، اسٹیک پوائنٹر کی قیمت کو صرف اس تقریب سے پہلے بلایا گیا تھا جب اسے بحال کیا گیا تھا. ہر اسٹیک فریم میں فوری طور پر ذیل کے فریم کے اوپر اسٹیک پوائنٹر پر مشتمل ہے. اسٹیک پوائنٹر تمام رسید کے درمیان مشترکہ رجسٹرڈ رجسٹر ہے. ایک فنکشن کے کسی دیئے جانے والے انضمام کے فریم پوائنٹر سٹیک پوائنٹر کا ایک کاپی ہے کیونکہ اس سے پہلے اس تقریب کو مدعو کیا گیا تھا. [2]

فریم میں دوسرے دوسرے شعبوں کے مقامات کو یا تو فریم کے سب سے اوپر کے طور پر بیان کیا جا سکتا ہے، اسٹیک پوائنٹر کے منفی آفسیٹ یا فریم کے سب سے اوپر کے رشتہ دار کے طور پر، فریم پوائنٹر کے مثبت آفس کے طور پر. فریم پوائنٹر کے مقام خود کو اسٹیک پوائنٹر کے منفی آفسیٹ کے طور پر بیان کیا جانا چاہئے.

کالر کے فریم کو ایڈریس کو ذخیرہ کرنا [ ترمیم ]

زیادہ تر سیسٹموں میں ایک اسٹیک فریم میں فریم پوائنٹر رجسٹر کے پچھلے قدر پر مشتمل ایک فیلڈ موجود ہے، جب کالر کا عمل انجام دیا گیا تھا تو اس قدر قیمت. مثال کے طور پر، DrawLine اسٹیک فریم میں فریم پوائنٹر قیمت کا حامل ایک میموری مقام ہوگا جسے DrawSquare استعمال کرتا ہے (اوپر کی شکل میں دکھایا گیا نہیں). قیمت اندراج پر ذیلی میٹریٹر پر محفوظ ہے اور واپسی پر بحال کیا جاتا ہے. اسٹیک فریم میں ایک معروف جگہ میں ایسے فیلڈ ہونے کے بعد کوڈ کو موجودہ طور پر موجودہ معمول کے فریم کے تحت مسلسل ہر فریم تک رسائی حاصل کرنے میں مدد ملتی ہے، اور اس وقت واپس آنے سے قبل اس سے پہلے ہی فریم پوائنٹر کو فریم پوائنٹر کو بحال کرنے کی معمولی اجازت دیتا ہے.

غیر ملکی طور پر ناچنے والے معمولات [ ترمیم ]

مزید معلومات: نزدیک فنکشن اور غیر مقامی متغیر

پروگرامنگ کی زبانیں جنہوں نے نائب ذیلی اداروں کو سپورٹ کرتے ہیں وہ بھی کال فریم میں ایک فیلڈ رکھتے ہیں جو طریقہ کار کے تازہ ترین سرگرمی کے اسٹیک فریم میں اشارہ کرتے ہیں جو زیادہ تر قریبی طور پر کیلکسی سے منسلک کرتا ہے، مثلا callee کی فوری گنجائش . اسے تک رسائی لنک یا جامد لنک کہا جاسکتا ہے (جیسا کہ یہ متحرک اور ریورسسر کالز کے دوران جامد گھوںسلا کا ٹریک رکھتا ہے) اور معمول کو فراہم کرتا ہے (اس کے ساتھ ساتھ کسی بھی دوسرے روٹریوں کو بھی مدعو کرسکتا ہے) سطح کچھ آرکیٹیکچرز، کمپائلر، یا حسب ضرورت کے معاملات میں ہر منسلک سطح (نہ صرف فوری طور پر منسلک) کے لئے ایک لنک ذخیرہ ہوتا ہے، لہذا جس طرح گہری نئٹڈ روٹیاں اتنی ڈیٹا تک رسائی حاصل کرتی ہیں وہ کئی لنکسوں کو منتقل کرنے کی ضرورت نہیں ہیں؛ یہ حکمت عملی اکثر "ڈسپلے" کہا جاتا ہے. [3]

رسائی کے لنکس کو بہتر بنایا جاسکتا ہے جب اندرونی فنکشن کو کسی بھی (غیر مستقل) مقامی ڈیٹا کو encapsulation تک رسائی حاصل نہیں ہوتی، مثال کے طور پر، صرف دلائل اور واپسی اقدار کے ذریعہ بات چیت کرنے والے خالص افعال کے معاملے میں. کچھ تاریخی کمپیوٹرز جیسے بروروز بڑے سسٹم ، نیز کردہ افعال کی حمایت کرنے کے لئے خاص "ڈسپلے رجسٹر" تھے، جبکہ انتہائی جدید مشینیں (جیسے جیسے ایکسچینج x86) کے لئے تحریر صرف اشارے کے لئے اسٹاک پر کچھ الفاظ محفوظ کرتی ہیں، ضرورت کے مطابق.

اوورلیپ [ ترمیم ]

کچھ مقاصد کے لئے، ایک subroutine کے اسٹیک فریم اور اس کے کالر کے اس پر قابو پانے کے لئے سمجھا جا سکتا ہے، اوورلوپ جس علاقے پر مشتمل ہے جہاں پیرامیٹرز کالر سے گلی سے گزر جاتا ہے. کچھ ماحول میں، کالر ہر دلیل کو اسٹیک پر دھکا دیتا ہے، اس طرح اس کے اسٹریم فریم کو توسیع کرتا ہے، پھر کیلٹی کو مدعو کرتا ہے. دوسرے ماحول میں، کالر اس کے اسٹاک فریم کے اوپر ایک منسلک علاقے ہے جو دلیلوں کو روکنے کے لۓ دوسرے subroutines کو اس کی فراہمی کرتی ہے. یہ علاقہ کبھی کبھی باہر جانے والے منطق علاقہ یا کال آؤٹ علاقے کے طور پر قرار دیا جاتا ہے. اس نقطہ نظر کے تحت، علاقے کے سائز کو کسی بھی نامیاتی اداریہ کے ذریعہ سب سے بڑی ضرورت ہوتی ہے، اس کے مطابق اس کا مجموعہ مرتب کیا جاتا ہے.

استعمال کریں [ ترمیم ]

کال سائٹ پروسیسنگ [ ترمیم ]

عام طور پر کال اسٹیک ہراساں کرنا ایک سبسویٹائن کو کال کی سائٹ پر کم سے کم ہے (جو اچھا ہے کیونکہ وہاں سے ہر ایک ذیلی میٹرو کے لئے کال کال سائٹس بھی کہا جا سکتا ہے). اصل دلیلوں کے لئے اقدار کال سائٹ پر تشخیص کی جاتی ہیں، کیونکہ وہ خاص کال کے لئے مخصوص ہیں، یا پھر اسٹاک پر دھکا یا رجسٹرڈ کالون کنونشن کے ذریعہ مقرر کیا جاتا ہے . اصل کال ہدایات، جیسے "شاخ اور لنکس"، پھر عام طور پر ہدف کے ذیلی ادویات کے کوڈ میں کنٹرول منتقل کرنے کے لئے اعدام کیا جاتا ہے.

Subroutine داخلہ پروسیسنگ [ ترمیم ]

بلایا جاتا ہے subroutine میں، عام طور پر عملدرآمد کا پہلا کوڈ subroutine پروجیکٹ کا دعوی کیا جاتا ہے، کیونکہ اس سے قبل معمول کے بیانات کے لئے کوڈ سے پہلے گھریلو ضروریات شروع ہوتی ہے.

درخواست عام طور پر کال اسٹیک پر قیمت کو آگے بڑھانے کے ذریعے کال ہدایت کی طرف سے ایک رجسٹر میں چھوڑ دیا واپسی کے ایڈریس کو بچائے گا. اسی طرح، موجودہ اسٹیک پوائنٹر اور / یا فریم پوائنٹر اقدار کو دھکا دیا جا سکتا ہے. متبادل طور پر، بعض ہدایات نے آرکیٹیکچرز کو خود کار طریقے سے کال ہدایت خود کی کارروائی کے طور پر نسبتا مماثلت فراہم کی ہے، اور اس طرح کے ماحول میں پیشرفت کی ضرورت نہیں ہے.

اگر فریم پوائنٹس استعمال کیے جا رہے ہیں تو، عام طور پر اسٹیک پوائنٹر سے فریم پوائنٹر رجسٹر کی نئی قیمت مقرر کرے گی. مقامی متغیر کے لئے اسٹیک پر خلائی اس کے بعد اسٹیک پوائنٹر کو تبدیل کرنے میں اضافہ کرکے مختص کیا جا سکتا ہے.

فورتھ پروگرامنگ کی زبان کو کال اسٹیک کے واضح گھماؤ کی اجازت دیتا ہے (وہاں "واپس سٹیک" کہا جاتا ہے).

پروسیسنگ واپس [ ترمیم ]

جب ایک ذیلی ریستوران واپس کرنے کے لئے تیار ہے تو، یہ ایک ایسی انجیل کو انجام دیتا ہے جو پیش رفت کے مرحلے کو رد کردتا ہے. یہ عام طور پر اسٹیک فریم سے بچایا رجسٹرڈ اقدار (جیسے فریم پوائنٹر کی قیمت) بحال کرے گا، اسٹیک پوائنٹر قیمت کو تبدیل کر کے اسٹیک بند کریں اور آخر میں واپسی کے ایڈریس میں ہدایت پر شاخ کو چالو کریں. کئی کالوں کے کنونشنوں کے تحت ایپلائیوگ کی طرف سے اسٹیک بند ہوگئی اشیاء میں اصل دلیل اقدار شامل ہیں، جس میں عام طور پر کوئی اسٹیک ہارپولیاں نہیں ہیں جو کالر کی طرف سے کئے جاتے ہیں. کچھ کالوں کے کنونشن کے ساتھ، تاہم، واپسی کے بعد اسٹیک سے دلائل کو دور کرنے کے لئے یہ کالر کی ذمہ داری ہے.

ناگزیر [ ترمیم ]

بلایا فنکشن سے واپسی اسٹیک کے سب سے اوپر فریم بند ہو جائے گا، شاید واپسی قیمت چھوڑ کر. پروگرام میں کسی دوسرے جگہ پر عملدرآمد دوبارہ شروع کرنے کے لئے ایک یا زیادہ سے زیادہ فریم پاپنگ کرنے کا زیادہ عام عمل کہا جاتا ہے کہ غیر مقامی کنٹرول ڈھانچے استعمال کیے جاتے ہیں، جب غیر استثنی سے متعلق ہینڈلنگ کے لئے استعمال کیا جاتا ہے. اس صورت میں، ایک فنکشن کے اسٹریم فریم میں ایک یا زیادہ سے زیادہ اندراج شامل ہیں جو استثنا ہینڈلرز کی وضاحت کرتے ہیں. جب کسی استثناء کو پھینک دیا جاتا ہے تو، اسٹیک کو ناپسند ہوتا ہے جب تک کہ ہینڈلر نہیں پایا جاسکتا ہے کہ پھینک دیا گیا ہے.

کچھ زبانوں میں دیگر کنٹرول ڈھانچے ہیں جو عام طور پر غیر مطلوب ہوتے ہیں. پااسسل نے گلوبل گٹو بیان کی اجازت دی ہے جس میں کسی غیر فعال فنکشن سے باہر نکلنا اور پہلے سے منسوب بیرونی کام میں منتقل ہوجائے. اس آپریشن کو اسٹیک کو ناگزیر ہونا ضروری ہے، جس میں بہت سارے فریم کو ہٹانے کے لئے مناسب سیاق و سباق بحال کرنے کے لئے لازمی طور پر بیرونی کارروائی کے اندر ہدف بیان میں کنٹرول منتقل کرنے کے لئے ضروری ہے. اسی طرح، سی setjmp اور setjmp افعال ہیں جو غیر مقامی setjmp طور پر کام کرتے ہیں. عام لیپ کو unwind-protect خصوصی آپریٹر کا استعمال کرتے ہوئے اسٹیک کو غیر معمولی ہونے پر کیا ہوتا ہے.

جب تسلسل کا اطلاق ہوتا ہے تو اسٹیک (منطقی طور پر) ناپسندیدہ ہے اور پھر تسلسل کے اسٹیک کے ساتھ پڑتا ہے. یہ عمل جاری کرنے کا ایک واحد طریقہ نہیں ہے؛ مثال کے طور پر، ایک سے زیادہ، واضح اسٹیک استعمال کرتے ہوئے، مسلسل تسلسل کا اطلاق اس اسٹیک کو چالو کرسکتا ہے اور ہوا کی قیمت کو گزرنے کے قابل بناتا ہے. اس منصوبے کی پروگرامنگ کی زبان کی اجازت دیتا ہے جب تک جاری رکھے جانے پر جب اس پر قابو پانے کے لۓ کنٹرول اسٹیک کا " غیرمقابل " یا "دوبارہ" پر مخصوص پوائنٹس میں مباحثہ کے قابل بنائے جائیں.

معائنہ [ ترمیم ]

یہ بھی ملاحظہ کریں: پروفائلنگ (کمپیوٹر پروگرامنگ)

پروگرام اسٹاک چل رہا ہے کے طور پر کال سٹیک کبھی کبھی معائنہ کیا جا سکتا ہے. پروگرام پر لکھا اور مرتب کیا جاتا ہے پر منحصر ہے، اسٹیک پر معلومات انٹرمیڈیٹ اقدار اور فنکشن کال کے نشانوں کا تعین کرنے کے لئے استعمال کیا جا سکتا ہے. اس سے استعمال شدہ آٹو ٹیسٹ، [4] اور روبی اور چھوٹاٹک جیسے معاملات میں، پہلی طبقاتی تسلسلوں کو لاگو کرنے کے لئے استعمال کیا گیا ہے. مثال کے طور پر، GNU ڈیبگر (GDB) چل رہا ہے، لیکن روک دیا، سی پروگرام کے کال اسٹیک کے انٹرایکٹو معائنہ کو لاگو کرتا ہے. [5]

کال سٹیک کے باقاعدگی سے وقت کے نمونے لے کر پروگراموں کی کارکردگی کو بہتر بنانے میں مفید ثابت ہوسکتا ہے، کیونکہ اگر ایک ذیلی میٹریٹر کا پوائنٹر کئی بار کال اسٹیک نمونے کے اعداد و شمار پر ظاہر ہوتا ہے، تو یہ امکان ہے کہ کوڈ کی بوتلیں اور کارکردگی کی دشواریوں کا جائزہ لیں.

سیکورٹی [ ترمیم ]

اہم مضمون: اسٹیک بفر بہاؤ

مفت اشارے یا غیر معائنہ کردہ سر کے ساتھ زبان میں لکھتا ہے (جیسے سی میں)، کنٹرول بہاؤ کے اعداد و شمار کا اختلاط جس کو کوڈ (ان کی واپسی کے پتوں یا محفوظ کردہ فریم پوائنٹس) اور سادہ پروگرام کے اعداد و شمار پر اثر انداز ہوتا ہے. ) ایک کال اسٹیک میں ایک سیکورٹی کا خطرہ ہے، ممکنہ طور پر اسٹیک بفر کے ذریعے زیادہ سے زیادہ عام طور پر بفر بہاؤ بہاؤ کے طور پر استحصال .

اس طرح کے حملوں میں سے ایک بھی شامل ہے کہ کسی بہادر کو مباحثہ کے قابل عمل کوڈ کے ساتھ بھرنے کے لۓ، اور پھر ایک ہی یا کسی دوسرے بفر کو اڑانے کے لۓ ایک قدر کے ساتھ کچھ واپسی ایڈریس کو زیادہ سے زیادہ کرنے کے لئے، جو براہ راست عملدرآمد کوڈ پر نکاتی ہے. نتیجے کے طور پر، جب فنکشن واپس آتی ہے، کمپیوٹر اس کوڈ پر عمل کرتا ہے. اس قسم کا حملہ آسانی سے W ^ X کے ساتھ بند کر دیا جا سکتا ہے. [ حوالۂ ضرورت ] اسی طرح کے حملوں کے ساتھ بھی W ^ X تحفظ کو فعال ہونے میں کامیاب ہوسکتا ہے، بشمول واپسی سے لے جانے والے حملے یا واپسی پر مبنی پروگراموں سے آنے والے حملوں سمیت. مختلف کمی کی تجویز پیش کی گئی ہے، جیسے کہ واپسی سٹیک سے مکمل طور پر علیحدہ مقام میں arrays کو ذخیرہ کرنا، جیسے کہ فورتھ پروگرامنگ زبان میں ہے. [6]