PDA

View Full Version : سوال در مورد پشته ی ذخیره سازی اطلاعات توابع فعال



user1101
پنج شنبه 14 خرداد 1388, 02:43 صبح
می خواستم بدونم که چون پارامتر ها و متغیر های محلی توابعی که فراخوانی می شن در یک پشته ذخیره می شن، آیا همیشه این پارامترها و متغیر های مربوط به یک تابع در محل های متوالی حافظه ذخیره می شن؟ روی تابعی از یک برنامه با استفاده از اشاره گرها امتحان کردم که تمام متغیرهای محلی در مکان های متوالی بودن اما تو کتاب نوشته که متغیرها در هر جایی از حافظه ممکن هست ذخیره بشن و اصلا نمی شه رو اینکه در مکان های متوالی ذخیره می شن حساب کرد

Nima_NF
پنج شنبه 14 خرداد 1388, 11:57 صبح
خیر هرگز به این موضع اعتماد نکنید که پشت سر هم ذخیره می شوند. فقط به مواردی اعتنا کنید که خود زبان برنامه نویسی تعریف کرده است.(مثلا اطلاعات تک تک خانه های یک آرایه)
ضمنا دقت کنید که این فقط شما نیستید که حافظه تخصیص می دهید، بسیاری از توابعی که ممکن است در داخل تابع استفاده کنید هم در زمان ها مختلف ممکن هست حافظه تخصیص دهند.

shs_night
دوشنبه 18 خرداد 1388, 02:44 صبح
با عرض سلام

پارامترها در زبان c همیشه در پشته از راست به چپ قرار میگیرند
مثال:

void func(int a,int b)
در مثال بالا ابتدا متغیر b در پشته قرار میگیرد(آدرس بزرگتر) سپس متغیر a(آدرس کوچکتر) .

وقتی متغیرها در حافظه قرار میگیرند جای آن برای ما مشخص نیست و در هر جایی که فضای کافی وجود داشته باشد این متغیرها در آنجا ذخیره میشوند.

مثال2:

char x[80],y[80]
از اینکه x قبل از y تعریف شده است نمیتوان تصور کرد که x در حافظه قبل از y قرار دارد.

موفق باشید.

منبع: برنامه نویسی به زبان سی جعفرنژاد قمی