TGViewer
کداکسپلور | CodeExplore کداکسپلور | CodeExplore @codeexplore · 9.2K subscribers
Post #4187 1.69K
مدیریت حافظه توی Go ⏳
شاید براتون جالب باشه بدونید که هر برنامهٔ کامپیوتری معمولاً حافظه‌شو تو سه بخش اصلی نگه می‌داره:

حافظهٔ سراسری (Global): برای متغیرهایی که کل مدت اجرای برنامه هستن.
پشته (Stack): برای متغیرهای محلی و موقتی؛ سریع و خودکار تخصیص و آزاد می‌شه.
هیپ (Heap): برای داده‌هایی که عمر طولانی‌تری دارن یا بین بخش‌های مختلف برنامه به اشتراک گذاشته می‌شن؛ مدیریت‌شون کمی سخت‌تره.

زبان Go برای این‌که برنامه‌ها سبک‌تر و سریع‌تر باشن، تا جایی که می‌تونه داده‌ها رو تو پشته نگه می‌داره. این‌که یه داده تو پشته بمونه یا بره هیپ، رو بخشی از کامپایلر به اسم تحلیل فرار (Escape Analysis) تصمیم می‌گیره. این تحلیل نگاه می‌کنه اگه یه متغیر بعد از تموم شدن تابع هم باید زنده بمونه، می‌فرستدش هیپ.

تو زبان‌هایی مثل C و ++C، آزاد نکردن حافظه، دوبار آزاد کردن یا اشاره‌گرهای معلق می‌تونه دردسر بزرگی بشه. Go با داشتن جمع‌آوری‌کنندهٔ زباله (Garbage Collector) این دردسرا رو از دوش برنامه‌نویس برداشته. GCش بر پایهٔ الگوریتم Mark & Sweep کار می‌کنه و خودکار حافظهٔ بلااستفاده رو آزاد می‌کنه.

به زبون ساده:
1️⃣ توقف کوتاه‌مدت برنامه (Stop-The-World): وقتی GC شروع می‌شه، اجرای goroutineها برای مدت کوتاهی متوقف می‌شه تا وضعیت حافظه ثبت بشه.
2️⃣ علامت‌گذاری (Mark): اشیایی که هنوز در حال استفاده‌ان علامت می‌خورن.
3️⃣ پاک‌سازی (Sweep): حافظهٔ اشیای غیرقابل‌دسترس آزاد می‌شه.

یه نکتهٔ جالب دیگه اینه که کد نهایی Go شامل runtime خودش هم هست؛ یعنی وقتی یه برنامهٔ Go رو کامپایل می‌کنید، علاوه بر کد شما، اجزای زمان‌اجرای Go مثل همین GC، مدیریت پشته، زمان‌بندی goroutineها و فراخوانی‌های سیستمی هم داخل فایل باینری قرار می‌گیرن. این باعث می‌شه خیلی از قابلیت‌های مدیریت حافظه به‌صورت خودکار تو برنامه حاضر باشه.

پس GC همواره رشد هیپ رو زیر نظر داره و هر وقت لازم باشه، چرخهٔ جدیدی راه می‌ندازه تا حافظهٔ غیرقابل‌استفاده آزاد بشه. نتیجهٔ این طراحی اینه که تو Go می‌تونید با خیال راحت‌تر برنامه‌نویسی کنید و کمتر نگران آزاد کردن دستی حافظه باشید.

#go #memory #managment
☕️ Telegram | Website | Discord
  • 🔥 6
  • ❤‍🔥 2
  • 😍 2
More from @codeexplore
  1. Oct 5, 2026😂😮 #fun ☕️ Telegram | Website | Discord
  2. Oct 5, 2026‏Vengeance UI مجموعه‌ای از Component های اوپن سورس انیمیشنی پر استفاده رو با افکتای مخ…
  3. Oct 4, 2026پشت هر شخصیت برنامه‌نویس، سال ها یادگیری، تلاش و آزمون‌وخطا وجود داره. ☕️ Telegram | Websi…
  4. Oct 4, 2026غول فناوری و هوش مصنوعی یک سرور قدرتمند برای نسل جدید پردازش‌های هوش مصنوعی و زیرساخت‌های…
  5. Oct 4, 2026Post #4848
  6. Oct 4, 2026اگر میخواید ساختار یه پروژه گیت هاب رو خیلی سریع و راحت بررسی کنید، GitDiagram میتونه کل ر…
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 →