خزینه حافظه
استخر حافظه، یا تخصیص بلوکهای با اندازهٔ ثابت، روشی برای تخصیص حافظه پویا است. این نوع تخصیص حافظه قابل مقایسه با malloc و اپراتور new در ++C است. در این دو روش، به دلیل استفاده از بلوکها با اندازههای مختلف، ما با مشکل پارگی حافظه روبه رو میشویم و لذا استفاده از این روشها در سیستمهای بلا درنگ احتمال دارد غیرممکن باشد. یک راه حل مفید تر این است که تعدادی از بلوکهای حافظه با اندازهٔ یکسان به نام استخر حافظه را پیش تخصیص کنیم. برنامه در طول مدت اجرا توانایی تخصیص، دسترسی و آزادسازی بلوکها را دارد.
خیلی از سیستمهای بیدرنگ از استخرهای حافظه استفاده میکنند؛ مانند (TPF (transaction Processing Facility
بعضی از سیستمها مانند وب سرور Nginx از اصطلاح استخرهای حافظه برای گروهی از تخصیصها با اندازههای مختلف ولی با امکان آزادسازی یکجا، استفاده میکنند. این موضوع ناحیه نیز خوانده میشود.
اجرای استخر حافظه ساده
[ویرایش]یک واحد استخر حافظهٔ ساده میتواند بهطور مثال ۳ استخر با بلوکهای با اندازهٔ بهینه شده برای برنامه را در حین زمان کامپایل تخصیص دهی کند. برنامه با واسطههای زیر میتواند تخصیص، دسترسی و آزاد سازی حافظه کند:
- از استخرها تخصیص حافظه کن! تابع استخری را که بلوک مورد نیاز با آن مطابقت میکند را مشخص میکند. اگر تمام بلوکهای استخر از قبل رزرو شده باشند، تابع سعی میکند بلوکی در استخر بزرگتر بعدی پیدا کند.
- یک اشاره گر ه حافظهٔ تخصیص یافته بده!
- بلوک تخصیص یافتهٔ قبلی را آزاد کن!
استخر حافظه در مقایسه با malloc
برتریها
[ویرایش]- استخرهای حافظه باعث تخصیص حافظه با زمان اجرای ثابت میشود. تخصیص حافظه برای هزاران شیء تنها در یک عملیات صورت میگیرد؛ بر خلاف malloc که در آن تخصیص حافظه یکی یکی صورت میگیرد.
- میتوان استخرهای حافظه را جز ساختارهای درختی سلسله مراتبی گروهبندی کرد. این ساختار مناسب ساختارهای برنامهنویسی خاصی مانند loopها و recursionها میباشد.
- بلوکهای با سایز ثابت استخرها احتیاجی به ذخیره کردن فرادادههای تخصیص (توصیفکنندهٔ ویژگیهایی مانند سایز بلوک تخصیص یافته) برای هر تخصیص ندارد. مخصوصآ در تخصیصهای کوچک، این باعث صرفه جویی مفید حافظه میشود.