نحوه قرارگیری متغیر const در کد اسمبلی تولیدی کامپایلر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

نحوه قرارگیری متغیر const در کد اسمبلی تولیدی کامپایلر

+4 امتیاز
سلام خسته نباشید

من می خواستم بدونم وقتی که ما یک متغیر رو به شکل const تعریف می کنیم در مقایسه با با حالتی که متغیر const نیست در کد اسمبلی تولیدی کامپایلر چه تفاوتی  ایجاد میشه ؟
سوال شده مرداد 28, 1393  بوسیله ی علیرضا حقجو (امتیاز 32)   1 3 5
دوباره تگ گذاری شد شهریور 11, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ
سلام .

البته این تصمیم کامپایلرها هست . ولی معمولا متغییر های const که read-only هستند داخل  Code‌ Segment که به اسم Text‌ Segment هم شناخته شده است ،  ذخیره میشن.
پاسخ داده شده مرداد 28, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد مرداد 28, 1393 بوسیله ی علیرضا حقجو
منظورتون اینه که مقادیر بصورت ثابت داخل جاهایی که از کد استفاده شدن جایگزین میشن ؟
اگر متغیر ها  مقدارشون زمان کامپایل مشخص نباشه چی ؟ آیا متغیری const ای که local هست و مقدارش بسته به ورودی کاربر ممکنه تغییر کنه با متغیر عادی از نظر قرارگیری در حافظه تفاوتی داره ؟
بله بیشتر مواقع اینطوره .
متغییرهای const همیشه باید مقدار دهی اولیه بشن .
ولی توی مواردی که میبینید مثلا مثل آرگومان های توابع یک متغییر یا اشاره گری رو بصورت const تعریف میکنن ، دلیلش اینه که به استفاده کننده تابع این رو تضمین میکنند که این تابع محتویاتی که اشاره گر به اونجا اشاره میکنه رو تغییر نمیده .
پس  const ورودی  تابع فقط برای خطایابی کد زمان کامپایل استفاده میشه و تاثیری در خروجی اسمبلی نداره ؟
نه متغییرهای constی که داخل آرگومان های توابع هستند در حقیقت const نیستند .
و فقط برای خطا یابی و برای اطمینان به استفاده کننده از تابع استفده میشن .
مثلا تابع strcpy (برای کپی کردن یک رشته به رشته دیگه است ) که  یک پارامترش const هست و اون یکی دیگه const نیست این رو بهتون نشون میده که اشاره گری که از نوع const نیست قرار داخلش تغییر ایجاد بشه و اون یکی که دارای const هست فقط قراره ازش خونده بشه . و همین به شما در مورد کارکرد تابع توضیح میده .
...