TGViewer
Gopher Academy Gopher Academy @gopher_academy · 3.85K subscribers
Post #4285 323
Gopher Academy 📌 Memory Allocation in Go ❌این پست اپدیت می‌شود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
این بخش وارد جزئیات مهمی از نحوه‌ی تشخیص محل اشاره‌گرها (pointers) در حافظه توسط Garbage Collector در Go می‌شود. در ادامه توضیح مختصر و مفیدش 👇



📘 Heap Bits و Malloc Header در Go Runtime

🔹 در زبان Go، Garbage Collector (GC) باید بداند کدام قسمت از یک شیء شامل pointer است تا بتواند به درستی گراف حافظه را پیمایش کند.
اما بررسی تک‌تک فیلدهای هر struct در زمان اجرا (runtime) بسیار پرهزینه خواهد بود، مخصوصاً برای ساختارهای بزرگ یا تو در تو.



💡 راه‌حل Go: استفاده از متادیتا (Metadata)

برای حل این مشکل، Go از دو سازوکار اصلی استفاده می‌کند:

1. Heap Bits

* برای هر ناحیه از حافظه‌ی heap، اطلاعاتی به‌صورت بیت‌فیلد ذخیره می‌شود که مشخص می‌کند
هر بخش از آن حافظه شامل pointer است یا داده‌ی معمولی (non-pointer).
* این بیت‌ها توسط کامپایلر در زمان کامپایل ساخته و در زمان اجرا توسط GC استفاده می‌شوند.
* نتیجه: GC می‌تواند مستقیماً بداند کدام قسمت‌ها را باید دنبال کند، بدون نیاز به اسکن کل struct.

2. Malloc Header

* هر شیء در heap یک هدر (header) دارد که اطلاعات مدیریتی مثل اندازه، نوع و آدرس بیت‌های مربوط به آن (heap bits) را نگهداری می‌کند.
ا * GC از این هدر برای دسترسی سریع به متادیتای مورد نیاز در زمان جمع‌آوری حافظه استفاده می‌کند.


⚙️ نتیجه

با ترکیب heap bits و malloc header**، GC در Go می‌تواند:

* تنها بخش‌های لازم را اسکن کند (به جای کل حافظه)
* با سرعت و دقت بالا گراف اشیاء را پیمایش کند
* و در عین حال، **کارایی بالایی در مدیریت حافظه
حفظ کند.


✅ خلاصه:
اGo با استفاده از *Heap Bits* و *Malloc Header*، مکان pointerها را از پیش می‌داند و به این ترتیب، فرآیند جمع‌آوری زباله را بسیار سریع و بهینه انجام می‌دهد — بدون نیاز به بررسی تکی‌تکی فیلدها در زمان اجرا.

➖➖➖➖➖➖➖➖
👑 @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 →