📦 Tracking Free Pages
در Go، فضای آدرس مجازی بسیار بزرگه، بنابراین برای مشخص کردن وضعیت هر صفحه (آزاد یا در حال استفاده) از bitmap استفاده میشه
در این bitmap:
1 = صفحه در حال استفاده (توسط span)
0 = صفحه آزاد
🔹 هر bitmap شامل ۸ عدد uint64 هست (یعنی ۶۴ بایت) و وضعیت ۵۱۲ صفحهی متوالی رو نگه میداره.
🔹 از اونجا که هر arena در Go اندازهی ۶۴ مگابایت داره و هر صفحه ۸ کیلوبایت هست، پس در هر arena:
۸۱۹۲ صفحه داریم
۱۶ تا bitmap برای پوشش کل صفحات
در مجموع فقط ۱ کیلوبایت حافظه برای ذخیرهی وضعیت کل صفحات لازمه! ⚡️
اما مشکل: پیمایش bitmap برای پیدا کردن صفحات آزاد هنوز کند بود ⏳
برای حل این، Go مفهومی به نام Summary معرفی کرد که سه ویژگی داره:
start → تعداد صفرهای پشت سر هم از ابتدای bitmap
end → تعداد صفرهای پشت سر هم از انتهای bitmap
max → طولانیترین دنبالهی صفرها در کل bitmap
هر بار که صفحهای allocate یا free میشه، این summary بلافاصله بهروزرسانی میشه تا Go بتونه خیلی سریعتر صفحات آزاد رو پیدا کنه 🚀
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Post #4306
513
Gopher Academy 📌 Memory Allocation in Go ❌این پست اپدیت میشود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم. درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…