PDA

View Full Version : متغیرهای استاتیک محلی



hercules_3d
دوشنبه 12 تیر 1385, 10:02 صبح
با سلام
فرض کنید یک متغیر استاتیک رو توی یه تابع تعریف کردیم حالا این متغیر ؛ یه متغیر استاتیک محلیه
در مورد متغیرهای استاتیک محلی در کتاب آقای جعفر نژاد قمی نوشته شده که این متغیر ها در زمان فراخوانی تابع ایجاد میشن در حالی که توی کتاب آقای دیتل نوشته :
For static-storage class variables, storage is allocated and initialized once when program begins execution
و در جای دیگه نوشته :
Local variables declared static still have block scope even though they exist from the time the program begins execution
چیزی که من از این چند خط انگلیسی حالیم شد اینه که متغیرهای استاتیک محلی از موقعی که برنامه شروع به اجرا میکنه در حافظه جا میگیرن و ممکنه اصلا تابع مربوطه فراخوانی نشه ولی با این وجود یه جایی برای متغیر در نظر گرفته میشه حالا من موندم مطلب آقای قمی درسته یا آقای دیتل یا من بد متوجه شدم هر دو مطلب یکین ؟!در هر حال میخواستم بدونم متغیر های استاتیک محلی از زمتنی که برنامه شروع میشه ایجاد میشه یا نه موقع فراخوانی تابع مربوطه ؟

Mahdi_Delphi
دوشنبه 12 تیر 1385, 17:18 عصر
متغیرهای استاتیک توی برنامه، مثل سایر متغیرها با شروع اجرای برنامه ایجاد میشن.
در مورد متغیرهای استاتیکی هم که داخل توابع اعلان میشوند فرقی نمیکنه موقع شروع برنامه ایجاد بشن یا موقع فراخوانی تابع؛ مهم اینه که دیگه از حافظه خارج نمیشن مگر موقع اتمام برنامه.
یعنی اگه حتی تابع مربوطه هم دوباره فراخوانی بشه دیگه این متغیر مقداردهی اولیه نمیشه،چون یکبار مقداردهی شده.


Local variables declared static still have block scope even though they exist from the time the program begins execution

توضیح : این متغیرها در تمام مدت اجرای برنامه در حافظه وجود دارند ولی فقط در بلوک یا دامنه مربوط به خودشون قابل دسترسی هستند.

این متغیرها فقط و فقط یکبار مقداردهی اولیه میشوند .

اگه توی کتاب جعفرنژاد قمی بنویشه که "این متغیر ها در زمان اولین فراخوانی تابع ایجاد میشن " جمله اش درست تر میشه.

موفق باشید.

hercules_3d
دوشنبه 12 تیر 1385, 20:38 عصر
با تشکر از پاسخ شما با این حال این متغیراستاتیک محلی موقع شروع برنامه ایجاد میشه یا موقع اولین فراخوانی تابع ؟

Mahdi_Delphi
سه شنبه 13 تیر 1385, 16:59 عصر
با تشکر از پاسخ شما با این حال این متغیراستاتیک محلی موقع شروع برنامه ایجاد میشه یا موقع اولین فراخوانی تابع ؟

دقیقاً نمیدونم.

بستگی داره به اینکه با شروع برنامه برای توابع و متغیرهای محلی داخل آنها فضا گرفته بشه یا به صورت پویا و با فراخوانی تابع بهش فضا اختصاص داده بشه.

خودم احتمال میدم با اولین فراخوانی تابع به این متغیرها فضا اختصاص داده میشه.