برای مدیریت بهینهی حافظه، Go حافظهی تخصیصدادهشده از طریق memory mapping را به واحدهای سلسلهمراتبی تقسیم میکند:
ساختار حافظه:
Arena (۶۴MB)
بزرگترین واحد تخصیص در Go.
هر Arena فضایی به اندازهی ثابت ۶۴MB دارد.
اGo سعی میکند Arenaها رو پشتسر هم قرار بده، ولی همیشه تضمین نمیشه (به خاطر رفتار mmap).
Page (۸KB)
هر Arena به صفحات (Page) تقسیم میشود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستمعامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازهی شیء کوچکتر از ۸KB باشد → چندین شیء در یک Page جا میگیرند.
اگر اندازهی شیء دقیقاً ۸KB باشد → کل Page را اشغال میکند.
اگر اندازهی شیء بزرگتر از ۸KB باشد → روی چند Page گسترده میشود.
اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری میشود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) میتواند تا ۴ goroutine stack را در خود جا دهد.
به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم میکند، سپس هر Arena را به Page (۸KB) میشکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده میشوند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Post #4233
627
Gopher Academy 📌 Memory Allocation in Go ❌این پست اپدیت میشود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم. درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…

- ❤ 4
- 👍 1
- 🏆 1