TGViewer
Gopher Academy Gopher Academy @gopher_academy · 3.86K subscribers
Post #4283 374
Gopher Academy 📌 Memory Allocation in Go ❌این پست اپدیت می‌شود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
این بخش درباره‌ی مفهوم 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
  • 🔥 1
  • 💯 1
More from @gopher_academy
  1. Sep 29, 2026📢 معرفی اپ «نویسنده تاریخ و مبلغ چک» موقع نوشتن چک، تاریخ و مبلغ را با حروف نوشتن وقت می‌…
  2. Sep 29, 2026🔵 عنوان مقاله How Do You Add a New Keyword to Go? (For Sum Types) 🟢 خلاصه مقاله: در زبان…
  3. Sep 28, 2026🔵 عنوان مقاله The First Official TinyGo Hardware 'Starter Kit' 🟢 خلاصه مقاله: در دنیای ف…
  4. Sep 28, 2026🔵 عنوان مقاله Is Go's FIPS 140 Code Bloating Your Binaries? 🟢 خلاصه مقاله: در دنیای فناو…
  5. Sep 28, 2026🔵 عنوان مقاله design for sum types 🟢 خلاصه مقاله: طراحی انواع جمع (Sum Types) در حال حاض…
  6. Sep 28, 2026🔵 عنوان مقاله Hister: A Go-Powered Search Engine for Your Own Stuff 🟢 خلاصه مقاله: در دن…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →