این بخش دربارهی مفهوم Span Class در مدیریت حافظهی Go است، و توضیح میدهد چطور وجود یا نبود اشارهگرها (pointers) روی عملکرد Garbage Collector تأثیر میگذارد. خلاصه و نکات مهمش به شکل زیر است 👇
📌 اSpan Class در Go
د🔹 Garbage Collector (GC در Go از نوع tracing است؛ یعنی برای یافتن آبجکتهای زنده، کل گراف حافظه را پیمایش میکند.
🔹 اگر یک نوع داده (type) هیچ اشارهگری نداشته باشد — مستقیم یا غیرمستقیم — GC میتواند آن را اسکن نکند**، چون مطمئن است که آن شیء به هیچ آبجکت دیگری اشاره ندارد.
🔹 این ویژگی در زمان کامپایل مشخص میشود، بنابراین هیچ هزینهی زمان اجرا (runtime cost) ندارد.
🧩 مفهوم Span Class:
برای استفاده از این بهینهسازی، Go مفهوم **Span Class را معرفی میکند.
هر Span Class بر اساس دو ویژگی تعریف میشود:
1.ا Size Class آبجکتهایی که در آن قرار دارند
2. وجود یا نبود اشارهگر در آن آبجکتها
🔸 اگر آبجکتهای Span شامل اشارهگر باشند → Scan Class
🔸 اگر اشارهگر نداشته باشند → NoScan Class
چون وجود اشارهگر یک ویژگی دودویی است (دارد یا ندارد)،
تعداد کل Span Classها برابر است با:
> 68 (تعداد Size Classها) × 2 = 136 Span Class
🔢 نحوهی تشخیص:
* هر Span Class یک عدد بین 0 تا 135 دارد.
* عدد زوج → Scan Class
* عدد فرد → NoScan Class
* Size Class = spanClass / 2
✅ جمعبندی
هر Span در Go نه فقط به یک Size Class بلکه به یک Span Class خاص تعلق دارد.
این تفکیک باعث میشود GC سریعتر و بهینهتر کار کند، چون لازم نیست آبجکتهای بدون اشارهگر را اسکن کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Post #4283
374
Gopher Academy 📌 Memory Allocation in Go ❌این پست اپدیت میشود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم. درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
- 🔥 1
- 💯 1