استخر حافظه

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

استخر حافظه، یا تخصیص بلوک‌های با اندازهٔ ثابت، روشی برای تخصیص حافظه پویا است. این نوع تخصیص حافظه قابل مقایسه با malloc و اپراتور new در ++C است. در این دو روش، بدلیل استفاده از بلوک‌ها با اندازه‌های مختلف، ما با مشکل پارگی حافظه روبه رو می‌شویم و لذا استفاده از این روش‌ها در سیستم‌های بلا درنگ احتمال دارد غیر ممکن باشد. یک راه حل مفید تر این است که تعدادی از بلوک‌های حافظه با اندازهٔ یکسان به نام استخر حافظه را پیش تخصیص کنیم. برنامه در طول مدت اجرا توانایی تخصیص، دسترسی و آزادسازی بلوک‌ها را دارد.

[[]]خیلی از سیستم‌های بلادرنگ از استخرهای حافظه استفاده می‌کنند؛ مانند ([[TPF ([[transaction Processing Facility

بعضی از سیستم‌ها مانند وب سرور Nginx از اصطلاح استخرهای حافظه برای گروهی از تخصیص‌ها با اندازه‌های مختلف ولی با امکان آزادسازی یکجا، استفاده می‌کنند. این موضوع ناحیه نیز خوانده می‌شود.

اجرای استخر حافظه ساده[ویرایش]

یک واحد استخر حافظهٔ ساده می‌تواند بطور مثال ۳ استخر با بلوک‌های با اندازهٔ بهینه شده برای برنامه را در حین زمان کامپایل تخصیص دهی کند. برنامه با واسطه‌های زیر می‌تواند تخصیص، دسترسی و آزاد سازی حافظه کند:

  • از استخرها تخصیص حافظه کن! تابع استخری را که بلوک مورد نیاز با آن مطابقت می‌کند را مشخص می‌کند. اگر تمام بلوک‌های استخر از قبل رزرو شده باشند، تابع سعی می‌کند بلوکی در استخر بزرگتر بعدی پیدا کند.
  • یک اشاره گر ه حافظهٔ تخصیص یافته بده!
  • بلوک تخصیص یافتهٔ قبلی را آزاد کن!

استخر حافظه در مقایسه با malloc

برتری‌ها[ویرایش]

  • استخرهای حافظه باعث تخصیص حافظه با زمان اجرای ثابت می‌شود. تخصیص حافظه برای هزاران شیء تنها در یک عملیات صورت می‌گیرد؛ بر خلاف malloc که در آن تخصیص حافظه یکی یکی صورت می‌گیرد.
  • می‌توان استخرهای حافظه را جز ساختارهای درختی سلسله مراتبی گروهبندی کرد. این ساختار مناسب ساختارهای برنامه نویسی خاصی مانند loopها و recursionها می‌باشد.
  • بلوک‌های با سایز ثابت استخرها احتیاجی به ذخیره کردن فراداده‌های تخصیص (توصیف کنندهٔ ویژگی‌هایی مانند سایز بلوک تخصیص یافته) برای هر تخصیص ندارد. مخصوصآ در تخصیص‌های کوچک، این باعث صرفه جویی مفید حافظه می‌شود.

منابع[ویرایش]