موضوع مقاله: پشته تماس | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # پشته تماس | مقدمه: یک پشته تماس یا پشته فراخوانی در علوم رایانه، یک ساختمان داده پشته است که اطلاعاتی درباره زیرروال‌های فعال یک برنامه رایانه‌ای را ذخیره می‌کند. | ## بخش 1: پشته تماس | اگرچه نگهداری از پشته تماس برای عملکرد درست نرم‌افزار مهم است، اما جزییات آن به صورت نرمال «پنهان» است و در زبان‌های برنامه‌نویسی سطح بالا، خودکار انجام می‌شود. خیلی از مجموعه دستورالعمل‌های رایانه‌ای دستورهای خاصی را برای دستکاری پشته‌ها تهیه می‌بینند. زیربرنامه فعال زیربرنامه‌ای است که فراخوانی شده‌است اما هنوز اجرایش تمام نشده‌است. وقتی زیربرنامه‌ای فراخوانی می‌شود، قبل از اینکه کنترل اجرای برنامه به آدرس زیربرنامه پرش کند آدرس دستورالعمل بعدی (دستورالعملی که درحافظه بعد از دستور فراخوانی قرار دارد) درجائی باید ذخیره شود که هنگام برگشت از زیربرنامه از آن استفاده می‌شود. معماری که بر اساس پشته است آدرس برگشتی را به عنوان نقطه برگشت در پشته اضافه می‌شود. هنگام برگشت از زیربرنامه آدرس برگشتی از پشته pop شده و کنترل برنامه به آن آدرس پرش می‌کند و اجرای برنامه از بعد از دستور فراخوانی ادامه پیدا می‌کند. به دلیل استفاده از پشته یک زیربرنامه می‌تواند خودش یا زیربرنامه‌های دیگر را صدا بزند. | ## بخش 2: پشته تماس | کاربرد پشته‌ها در فراخوانی توابع هر وقت تابعی فراخوانی می‌شود یک رکورد فعالیت برای آن تابع ایجاد می‌گردد و محیط فعلی را برای آن تابع ذخیره می‌کند. حافظه‌های موقت برای انجام محاسبات میانیچون ممکن است هر تابع، توابع دیگری را فراخوانی کند و اجرای خود آن تابع به تعویق افتد، رکورد فعالیت آن باید طوری ذخیره شود که وقتی تابع از سر گرفته می‌شود، بتوان به رکورد فعالیت آن دست یافت. ساختمان داده‌ای که رکوردهای فعالیت در آن ذخیره می‌شوند، باید رفتار LIFO (خروج به ترتیب عکس ورود) داشته باشد، زیرا اولین تابعی که خاتمه یابد، آخرین تابعی است که فراخوانی شده‌است و رکورد فعالیت آن باید زودتر از همه بازیابی شود. وقتی تابعی خاتمه می‌یابد، یک عمل pop رکورد فعالیت این تابع را از پشته حذف می‌کند و رکورد فعالیت تابع قبلی، که این تابع را فراخوانی کرده‌است، در بالای پشته قرار می‌گیرد.جعفر نژاد قمی, ساختمان داده در++C.[=صفحات کتاب]... محتویات ذخیره آدرس برگشت وقتی که رویه‌ای فراخوانی می‌شود، باید مکان (آدرس) دستورالعملی که رویه را فراخوانی کرده در جایی ذخیره شود تا بعد از برگشت تابع، اجرای برنامه از همان نقطه از سر گرفته شود. استفاده از یک پشته برای ذخیره کردن آدرس برگشت تابع مزایایی نسبت به دیگر روش‌ها دارد. یکی از مزیت‌ها این است که هر فرایندی پشته مخصوص به خود را دارد، در نتیجه رویه می‌تواند به صورت reentrant باشد و می‌تواند به شکل همزمان برای چندین فرایند که هر کدام کارهای مختلفی را انجام می‌دهند فعال باشد. | ## بخش 3: پشته تماس | وقتی که تابعی خودش را به صورت بازگشتی فراخوانی می‌کند، به ازای هر بار فراخوانی تابع باید یک آدرس برگشت ذخیره شود تا بعداً بتوان از آن‌ها برای برگشتن از تابع استفاده کرد. ذخیره‌سازی داده‌های محلی یک رویه مکرراً به فضایی از حافظه احتیاج دارد تا مقادیر متغیرهای محلی خودش را ذخیره کند. متغیرهای محلی تنها برای همان تابع در دسترس هستند و توابع دیگر و حتی فراخوانی‌های دیگر از همان تابع نمی‌توانند به آن متغیرها دسترسی داشته باشند. کافیست آدرس بالای پشته را به اندازه کافی جابجا کنیم تا فضای مورد نیاز برای تابع فراهم شود. ارسال پارامترها در هنگام فراخوانی توابع، معمولاً تعدادی آرگومان به آن‌ها ارسال می‌شود که آن‌ها را باید در جایی ذخیره کرد تا تابع بتواند از آن‌ها استفاده کند. اگر تنها چند پارامتر کوچک وجود داشته باشد، از ثبات‌های پردازنده می‌توان برای ذخیره کردن این پارامترها استفاده کرد. اما اگر پارامترها بیشتر از چیزی باشد که بتوان آن‌ها را در ثبات‌ها قرار داد، باید از فضای موجود در حافظه برای ذخیره کردن آن‌ها استفاده کنیم. | ## جمع‌بندی | از آنجا که معمولاً تابع هر بار با پارامترهای مختلفی فراخوانی می‌شود، هر فراخوانی، فضای مخصوص به خودش را در پشته برنامه خواهد داشت.