مدل حافظه (برنامه‌نویسی)

مدل حافظه در برنامه‌نویسی چگونگی تعاملات رشته‌های اجرایی مختلف از طریق حافظه و داده‌های اشتراکی را شرح می‌دهد.

تاریخچه و اهمیت ویرایش

مدل حافظه اجازه می‌دهد تا یک کامپایلر بسیاری از بهینه‌سازی‌های مهم را انجام دهد. حتی بهینه‌سازی‌های ساده مانند اظهارات حرکت همجوشی حلقه در برنامه می‌تواند ترتیب عملیات خواندن و نوشتن متغیرهای اشتراکی را تحت تأثیر قرار دهد. تغییر در ترتیب خواندن و نوشتن می‌تواند موجب رقابت شود. بدون یک مدل حافظه ، کامپایلر مجاز به اعمال چنین بهینه‌سازی‌هایی برای برنامه‌های چند رشته‌ای به‌طور کلی نیست، مگر در موارد خاص.

بنابراین زبان‌های برنامه‌نویسی مدرن مانند جاوا یک مدل حافظه اجرا می‌کنند. مدل حافظه موانع هماهنگ سازی را مشخص می‌کند که از طریق عملیات همگام سازی خاصی که به خوبی تعریف شده‌اند، مانند دستیابی به یک قفل با وارد کردن یک بلوک هماهنگ یا یک متود. مدل حافظه تصریح می‌کند که تغییرات در مقادیر متغیرهای به اشتراک گذاشته شده، تنها در صورتی برای سایر رشته‌های قابل مشاهده باشند که با چنین مانع هماهنگ سازی برخورد کرده باشیم. علاوه بر این، کل مفهوم شرایط رقابت براساس ترتیب عملیات با توجه به این موانع حافظه تعریف شده‌است.

سپس این معانی به کامپایلر بهینه‌سازی یک درجه بالاتر از آزادی درهنگام استفاده از بهینه‌سازی می‌دهد: کامپایلر تنها نیاز دارد تا مطمئن شود که مقادیر متغیر (به‌طور بالقوه به اشتراک گذاشته شده) در موانع هماهنگ سازی به‌طور تضمینی در هر دو کد بهینه‌سازی شده و بهینه‌سازی نشده یکسان باشند. به‌طور خاص، اظهارات مرتب‌سازی مجدد در یک بلوک از کد که حاوی هیچ مانع هماهنگ سازی نباشد توسط کامپایلر امن در نظر گرفته می‌شود.

بیشتر تحقیقات در حوزه مدل‌های حافظه پیرامون موضوعات زیر است:

طراحی یک مدل حافظه است که اجازه می‌دهد تا حداکثر درجه آزادی برای بهینه‌سازی کامپایلر وجود داشته باشد در حالی که هنوز تضمین کافی در مورد برنامه‌های فارغ ار رقابت و (شاید مهمتر) برنامه‌های حاوی رقابت را ارائه می‌دهد.

اثبات وجود برنامه‌های بهینه‌سازی که با توجه به این مدل حافظه درست هستند: مدل حافظه جاوا اولین تلاش برای ارائه یک مدل حافظه نخی جامع برای یک زبان برنامه‌نویسی محبوب بود. معناشناسی مدل حافظه در C و C + + از نسخه‌های زبان C + +11 و C11 استاندارد شده‌است.

منابع ویرایش