PDA

View Full Version : سوال: volatile & restrict



sadeghmosavi539
دوشنبه 26 خرداد 1393, 18:05 عصر
یا عرض سلام
می خواستم بدونم volatile & restrict چیست و چه موقع به کارمون میان؟

محمد فدوی
دوشنبه 26 خرداد 1393, 19:30 عصر
من تا این حد فهمیدم که این ها هرکدوم نوعی محدود کننده برای اشاره گر ها هستن:

int * volatile volatilePointer;
int * restrict restictPointer;

(restrict در لغت یعنی محدود کردن و volatile به معنی فرّار هستش)
این دو تا محدود کننده بصورت استاندارد در ++C وجود ندارن و توسط بعضی استانداردها فقط پشتیبانی میشن.

بطور معمول که ما برای ساخت یه اشاره گر از هیچ کدوم از این دوتا استفاده نمیکنیم، بطور پیشفرض اون اشاره گر بصورت Volatile تعریف میشه. منظورم اینه که ما همیشه با اشاره گر های Volatile برنامه نوشتیم!
اما اگر توی تعریف از Restrict استفاده کنیم، تنها تفاوتی که پیدا میشه اینه که ما تضمین میکنیم این اشاره گر صرفا به داده هایی اشاره میکنه (و خواهد کرد) که خودمون توی همون بلوک تعریف کردیم. به عبارت دیگه امنیت اطلاعات رم با اینکار بهتر حفظ میشه...

من چیز بیشتری در موردش پیدا نکردم و در ضمن مطمئن هم نیستم حرفام درست بوده باشه... دوستان و اساتید اگر ممکنه اصلاح کنن.

موفق باشید.

rahnema1
سه شنبه 27 خرداد 1393, 11:39 صبح
سلام
بستگی داره با چه زبانی و با چه کامپایلری بخواهید کار کنید
این کلمات در استاندارد زبان c99 وجود داره
restrict در واقع یک نوع کمک به کامپایلر هست که عمل بهینه سازی کامپایل را بهتر انجام بده مخصوصا در خصوص اشاره گر به آرایه ها
volatile هم برای جلوگیری از بهینه سازی توسط کامپایلر استفاده میشه. معمولا هنگام بهینه سازی ممکنه بعضی از عبارات که ما در برنامه نوشتیم توسط کامپایلر حذف بشه و به جای اون مقادیر محاسبه شده اون قرار داده بشه. اما ما لازم داشته باشیم مثلا یک متغیر توسط یک سخت افزار که به کامپیوتر وصل شده تغییر پیدا کنه.
با جلوگیری از بهینه سازی تضمین می کنیم که حتما آن متغیر وجود خواهد داشت و جای آن تغییر نخواهد کرد
در c++11 از کلمه restrict استفاده نمیشه و هنگامی که بخواهیم از کتابخانه های c هم استفاده کنیم از این کلمه صرفنظر شده در واقع عمل بهینه سازی به صورت خودکار انجام میشه
اما در c++11 کلمه volatile تقریبا با همون فلسفه ای که در c استفاده میشه، کاربرد داره.
یک نکته دیگه اینکه کامپایلر مایکروسافت در ++c از کلمه restrict استفاده کرده ( که مختص خودش هست):
http://msdn.microsoft.com/en-us/library/k649tyc7(v=vs.100).aspx

برای آشنایی بیشتر با volatile به این مقاله سایت ویکی پدیا می تونید مراجعه کنید:
http://en.wikipedia.org/wiki/Volatile_variable
در کامپایلر مایکروسافت هم volatile در زمینه thread ها هم کاربرد داره:
http://msdn.microsoft.com/en-us/library/12a04hfd(VS.100).aspx
http://msdn.microsoft.com/en-us/library/12a04hfd(VS.100).aspx

omid_kma
چهارشنبه 28 خرداد 1393, 21:26 عصر
این جا هم توضیح داده شده :
volatile در c++ چیست ؟ (http://www.7khatcode.com/index.php?qa=4495&qa_1=volatile-%D8%AF%D8%B1-c-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F)