PDA

View Full Version : سوال: منظور از پشته فراخواني تابع چيه؟



saworld
چهارشنبه 30 اردیبهشت 1388, 10:58 صبح
با سلام به همگي.


مي خواستم بدونم منظور از پشته فراخواني تابع يا ركورد فعاليت چيه؟

در ضمن من نميدونم اين قضيه در پايگاه داده هست يا نه . اما چون هنوز اون رو نخونديم

و در حال خواندن برنامه سازي پيشرفته هستيم و نميدونم استاد گرام واسه چي اينو گفته.

مثل اينكه بايد اين سول رو با شكل هم حل كرد . شكل حافظه يا stack ؟

اگه ميشه يه تمرين ساده كاربردي هم ممنون ميشم.

در ضمن مثل اينكه در رسم شكل عناويني نظير مقدار بازگشتي و آدرس بازگشتي هم رسم

مي شوند . اين رو هم اگه ميشه توضيح بدين.

ممنون ميشم.

tdkhakpur
چهارشنبه 30 اردیبهشت 1388, 15:34 عصر
سلام:
ببینید یه stack جایی هست که شما به قولی یادداشتها رو اونجا قرار میدید یعنی یه برنامه مثلا میخواد یه تابع رو صدا بزنه خوب تا اینجا مشکلی با stack نیست ولی اگه کار این تابع تموم شد از نظر سیستم باید کجا برگرده لذا قبل فراخوانی تابع یه آدرس ار محل کنونی برنامه (cs:ip و سایر وموارد که به دونستن اونها احتیاجی نیست) در پشته باید قرار بگیره تا بعدا به هنگام اتمام اجرای تابع فراخوانی شده به اون نقطه برگشته و کارمون رو ادامه بدیم.
به این روش به گفته استادتون فراخوانی پشته میگن.
مثال باید با برنامه باشه بهتره یه سری به دستورات popو push اسمبلی بندازید.
موفق باشید.

saworld
چهارشنبه 30 اردیبهشت 1388, 16:25 عصر
خيلي ممنون ........

فقط يه چيزي ، منظور از آدرس بازگشتي و مقدار بازگشتي چيه ؟:لبخندساده:

mortezamsp
چهارشنبه 30 اردیبهشت 1388, 16:42 عصر
void f()
{
int a=g();
}

int g()
{
int b;
return(b);
}



اینجا تابع f وسط کارش داره تابع g رو صدا میزنه.یعنی فعلا متوقف میشه و میره تو پشته.بعد تابع g شروع به کارمیکنه.تابع g هم بعد تموم شدن کارش ،سیستم باید برگرده به اونجایی از تابع f که اونجا تابع g رو صدا زده بودیم بعد به کار f ادامه بده.برای این کار تابع g باید آدرس برگشت رو توخودش داشته باشه.و از طرفی تو تابع f متغیر a باید مقدار بگیره.یعنی باید از آدرسی در حافظه مقدار بگیره.تابع g در دستور return این آدرس بازگشتی رو به a میده.

tdkhakpur
چهارشنبه 30 اردیبهشت 1388, 17:57 عصر
سلام:

فقط يه چيزي ، منظور از آدرس بازگشتي و مقدار بازگشتي چيه
ببینید همه کار ها توی حافظه انجام میشه و هر کاری مثل فراخوانی یه تابع در برنامه انجام میدیم بالاخره کامپیوتر آدرس رو میشناسه و چون اون تابع در یه جایی از حافظه ذخیره شده لذا آدرس اون رو باید داشته باشه تا کامپیتوتر بره و اون تابع رو پیدا کرده و اجراش کنه.
و معنی ادرس برای قرار دادن توی پشته همین بود یعنی یه آدرس رو نگه میداریم تا بعدا بتونیم اون آدرس که نشانگر جای تابعمون توی ram یا حافظه هست پیدا کنیم.
موفق باشید.