CODEEXPLORE Telegram 4187
مدیریت حافظه توی 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



tgoop.com/CodeExplore/4187
Create:
Last Update:

مدیریت حافظه توی 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

BY کداکسپلور | CodeExplore


Share with your friend now:
tgoop.com/CodeExplore/4187

View MORE
Open in Telegram


Telegram News

Date: |

According to media reports, the privacy watchdog was considering “blacklisting” some online platforms that have repeatedly posted doxxing information, with sources saying most messages were shared on Telegram. Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members. Write your hashtags in the language of your target audience. A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019.
from us


Telegram کداکسپلور | CodeExplore
FROM American