کداکسپلور | CodeExplore
7.93K subscribers
2.01K photos
345 videos
103 files
1.82K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
مدیریت حافظه توی 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