مدیریت حافظه، یکی از جنبههای بسیار حیاتی در برنامه نویسی است که به طور مستقیم برروی کیفیت و توان عملکرد نرمافزارهای کاربردی تاثیر دارد. درک کارکرد حافظه در نرم افزار، – یعنی روش تخصیص دادن، استفاده و رها کردن حافظه – برای برنامه نویسان مسئله بسیار ضروری است. زیرا به آنها برای اطمینان از استفاده بهینه منبع حافظه توسط برنامهها کمک میکند. تا به انتهای مطلب، به درک محکمی درباره اصول و قواعد مدیریت حافظه در برنامه نویسی رسیدهایم. همچنین با بهترین روشهای افزایش کیفیت استفاده از حافظه در کارهای برنامهنویسی خود آشنا شدهایم.
در این مطلب از مجله فرادرس، به بحث درباره مدیریت حافظه در برنامه نویسی پرداختهایم. ابتدا انواع مختلف حافظه را بررسی کرده و سپس مشکلات و چالشهای رایج بر سر راه مدیریت حافظه را بیان کردیم. بعد از آن انواع استراتژیهای مفید برای افزایش بهرهوری در استفاده از حافظه را نیز معرفی کردهایم. در نهایت هم بهترین روشهای کار با حافظه، تکنیکهای دیباگ کردن و ابزارهای مفیدی را معرفی کردهایم. موارد معرفی شده در آخر مطلب، به برنامه نویسان در برطرف کردن مشکلات مدیریت حافظه به شکل بسیار خوبی کمک میکنند.
مدیریت حافظه در برنامه نویسی چیست؟
در برنامه نویسی، مدیریت حافظه مانند قهرمانی است که در پشت صحنه برای اطمینان از اجرای روان برنامهها کار میکند. مدیریت حافظه شامل فرایند مدیریت و تخصیص حافظه کامپیوتر به برنامهها و پردازشهای مختلف است.
درباره مدیریت حافظه در برنامهنویسی، مانند مسئول کتابخانهای فکر کنید که وظیفه سازماندهی فضای محدود قفسههای – حافظه کامپیوتر – کتابخانه را برعهده دارد. این شخص، با توجه به درخواستهای رسیده، کتابها – اطلاعات – را به متقاضیان – همان برنامههای کامپیوتر – واگذار میکند. این رفتار از بروز اختلال در دسترسی به حافظه جلوگیری کرده و کارآمدی استفاده از منابع را به بیشتری حالت ممکن میرساند.
اهمیت مدیریت حافظه بهینه
وجود مدیریت حافظه به صورت بهینهسازی شده، برای افزایش کارایی و پایداری هر نرمافزار کاربردی ضروری است. وقتی که برنامهها از حافظه بسیار زیادی استفاده کنند یا در کار رها کردن حافظههای مصرف شده و بیاستفاده موفق نباشند، ممکن است کارایی سیستم کند شده یا برنامه به صورت ناگهانی متوقف شود. حتی شاید با پیغام خطای بسیار جدی «کمبود حافظه» (Out of Memory) نیز روبهرو شویم.
تلف کردن حافظه مانند انباشتن کتابهایی است که هیچ وقت نمیخوانیم یا نگهداری طولانی مدت کتابهایی که مطالعه آنها به پایان رسیده. این مسئله نه تنها باعث کاهش عملکرد و بهرهوری سیستم میشود بلکه حتی خودخواهی نیز به حساب میآید. زیرا از دسترسی دیگران به منابع مورد نیاز آنها جلوگیری میکند. با بهینهسازی مصرف حافظه میتوانیم عملکرد کلی و توان پاسخگویی برنامههای خود را افزایش دهیم.
انواع حافظه در برنامه نویسی
انواع حافظه در برنامه نویسی را به سه دسته مهم تقسیم میکنند. در این قسمت از مطلب، ابتدا این سه دسته را نام برده و سپس هر کدام را به صورت مجزا توضیح دادهایم.
- «حافظه پشتهای» (Stack Memory)
- «حافظه هیپ» (Heap Memory)
- «حافظه سراسری» (Global Memory)
در ادامه هر کدام از انواع حافظههای بالا را به ترتیب توضیح دادهایم.
حافظه پشته ای
«حافظه پشتهای» (Stack Memory) جایی است که توابع و متغیرهای محلی قرار گرفتهاند. این حافظه مانند فضای کاری موقتی عمل میکند. به این صورت که وقتی تابعی فراخوانی شود گسترش پیدا کرده و با به پایان رسیدن کار آن تابع دوباره منقبض میشود. به این حافظه، مانند پشتهای از برگههای کاغذی چسبیده به هم فکر کنید که فقط میتوان از بالاترین مورد در آنها استفاده کرد.
حافظه هیپ
از طرف دیگر، «حافظه هیپ» (Heap Memory) فضای بزرگتر و انعطافپذیرتری است. برنامههای در حال کار در حافظه هیپ میتوانند به صورت پویا برای خود حافظه اختصاص دهند. آن را مانند زمین بازی در نظر بگیرید که در آن میتوان قلعههای شنی با هر اندازهای ایجاد کرد. اما نکته اینجاست که بعد از به پایان رسیدن عملیات کار یا ساخت قلعه باید به صورت دستی آن فضا را تمیز کرد.
حافظه سراسری
«حافظه سراسری» (Global Memory) مانند مخزن نگهداری دادهها به صورت اشتراکی است. در این مخزن متغیرها و دادههای مختلف ذخیره میشوند. هر کسی هم میتواند موارد مورد نیاز خود را از درون این مخزن بردارد. توابع و ماژولهای مختلفی به این حافظه دسترسی دارند. حافظه سراسری یکی از راهحلهای بسیار مناسب برای مسئله ذخیرهسازی اطلاعات است. اما برای جلوگیری از هرجومرج و تداخلات ناخواسته باید با دقت زیادی مدیریت شود.
آموزش حرفه ای برنامه نویسی با کمک فرادرس
شناخت روشهای مدیریت حافظه در برنامه نویسی برای افراد مبتدی و حرفهای، باعث ارتقای مهارت و تواناییهای آنان میشود. اما برای اجرای پروژههای برنامه نویسی پیچیدهتر به آموزشهای پیشرفتهتری نیز احتیاج است. در دنیای برنامه نویسی هرچقدر که مهارت افراد بیشتر شود با مسائل مشکلتر، جذابتر و بسیار پربازدهتری نیز روبهرو میشوند و برعکس. به همین دلیل همه برنامهنویسان، چه افراد مبتدی و چه حتی حرفهایهای با سابقه، داعما در پی آموزش بیشتر و افزایش مهارتهای خود هستند. به این منظور هم باید آموزشها و آموزشگاهها در دسترس را برای پیدا کردن مطلب مورد نظر خود جستوجو کنند.
روشهای مختلفی برای آموزش نکات برنامهنویسی وجود دارند. اما آموزشگاههای حضوری و آکادمیک معمولا فقط تا سطوح ابتدایی و متوسط را پوشش میدهند. علاوه بر این کلاسهای حرفهای آموزش برنامهنویسی، نیازمند صرف هزینه و زمان زیادی هم هستند. به همین دلیل در فرادرس، تلاش کردهایم تا همیشه با کیفیتترین آموزشها را تولید کرده و در اختیار مخاطبان خود قرار دهیم. درضمن، فیلمهای آموزشی فرادرس قابلیت بازبینی مجدد و مرور نیز دارند. در قسمت پایین، چند مورد از فیلمهای حرفهای مربوط به زبانهای برنامهنویسی گوناگون را معرفی کردهایم.
در صورت نیاز به آموزشهای دیگر با کلیک برروی تصویر بالا، وارد صفحه اصلی مجموعه آموزش شوید و گزینه مورد نظر خود را بیابید.
چالش ها و مشکلات رایج مدیریت حافظه در برنامه نویسی
مدیریت حافظه در برنامه نویسی شامل بعضی چالشهایی است که بیتوجهی به آنها میتواند باعث بروز اتفاقات ناخواسته در روند و زمان اجرای برنامهها شود.
در این بخش از مطلب، ابتدا این چالشها را نام برده و سپس هر کدام را به صورت مجزا توضیح دادهایم.
- «نشت حافظه» (Memory Leaks)
- «اشارهگرهای آویزان» (Dangling Pointers)
- «قطعهبندی» (Fragmentation)
نشت حافظه
نشت حافظه، زمانی روی میدهد که برنامه مشغول به کار بخشهای مختلف حافظه را اشغال میکند، اما بعد از پایان کار خود موفق به رهاسازی مناسب حافظه اشغال شده نمیشود. فرض کنیم که کتاب جدیدی را از کتابخانه قرض گرفتهایم، اما فراموش کردیم که کتابهای قبلا قرض گرفته شده را برگردانیم. بهمرور زمان، این بلوکهای حافظه نشت کرده و روی هم انباشته میشوند. این انباشت حافظه غیرقابل استفاده، منجر به کمبود حافظه در دسترس و بروز خرابیهای احتمالی و کرش کردن در سیستم میشود.
اشاره گرهای آویزان
«اشارهگرهای آویزان» (Dangling Pointers)، موجودات کوچک و خطرناکی هستند. این موجودات زمانی به وجود میآیند که نشانگرهای حافظه به مکانهای خالی و رها شدهای اشاره کنند. استفاده از اشارهگرهای آویزان مانند داشتن و استفاده از نقشهای است که مکانهای غیرواقعی در آن به عنوان مقصد و هدف، علامتگذاری شدهاند. دسترسی ناگهانی به اشارهگرهای آویزان میتواند باعث بروز رفتارهای غیرمنتظره و کرش کردن سیستم شود.
قطعه بندی
«قطعهبندی» (Fragmentation) ارتباط مستقیم با مدیریت حافظه در سیستم عامل دارد. این مسئله مانند معمای جورچینی است که با تکههای پراکندهای از حافظه کار میکند. حتی اگر به اندازه کافی هم حافظه در دسترس باشد، وجود تکههای کوچک و پراکنده اشغال شده در RAM میتواند مانع استفاده از فضا برای ذخیرهسازی بلوکهای بزرگ داده در حافظه شود. مانند این است که به میز بزرگی نیاز داریم اما فقط میزهای کوچک و پراکندهای در دسترس هستند.
استراتژی های مربوط به استفاده بهینه از حافظه
استراتژیهای مربوط به استفاده بهینه از حافظه، طراحی شدهاند تا با کمترین هزینه از منابع به بیشترین بهرهوری برسیم. این موارد را در سه مورد زیر فهرست کردهایم.
- «تخصیص حافظه پویا» (Dynamic Memory Allocation)
- «آزادسازی مناسب» (Proper Deallocation)
- استفاده از «ساختارهای داده و الگوریتمها» (Data Structures and Algorithms)
برای اینکه با این مطالب به صورت عملی آشنا شویم باید، روشهای مختلف مدیریت حافظه را در سیستم عاملهای متفاوت بررسی کنیم. اتفاق معمولی که پس از گذشت زمان در کامپیوترهای سرور رخ میدهد، کاهش حافظه ذخیرهسازی است که باعث ایجاد مشکلات معددی میشود. مدیران لینوکس به طور خاص برای حل کردن این مسئله از ابزار خاصی استفاده میکنند. برای آشنایی و آموزش استفاده از این ابزار در برنامههای لینوکسی میتوانید فیلم آموزش مدیریت حافظه شناور LVM در لینوکس Linux را از فرادرس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در ادامه مطلب، تمام موارد بالا را به صورت خلاصه، مرتب و یک به یک توضیح دادهایم.
تخصیص حافظه پویا
«تخصیص حافظه پویا» (Dynamic Memory Allocation) به برنامه نویسان کمک میکند که در زمان اجرای برنامه از هیپ، درخواست دسترسی به حافظه کنند. این استراتژی، انعطافپذیری بیشتری به برنامه میدهد. فقط باید به یاد داشته باشیم که بعد از استفاده از حافظه، فضای اشغال شده خودمان را پاک کرده و رها سازیم.
آزادسازی مناسب حافظه
آزادسازی مناسب حافظه برای جلوگیری از نشت آن ضروری است. همیشه هر فرایند تخصیص حافظه را با فرایند آزادسازی متناسب با آن همسان قرار داده و بررسی کنید. این مسئله مثل برگرداندن کتابهای کتابخانه بعد از به پایان رسیدن مطالعه است. با این کار، منابع آزاد شده در دسترس سایر افراد یا فرایندهای نیازمند قرار میگیرند.
استفاده از ساختارهای داده و الگوریتم ها
به کار بردن ساختارهای ذخیرهسازی داده درست و الگوریتمهای مناسب، میتواند باعث به حداقل رساندن استفاده از حافظه شود. انتخاب ساختارها و الگوریتمهای بهینه و منطبق بر نیازهای خاص برنامهنویس، باعث میشود که میزان استفاده از حافظه، بهینهسازی شده و از بروز سربارهای غیر ضروری در حافظه، جلوگیری شود. این مورد، مانند این است که کتابهای خود را در قفسههای بزرگی قرار داده و برای پیدا کردن و دسترسی هرچه سریعتر به آنها از سیستم فهرستبندی درستی استفاده کنیم.
بنابراین باید به یاد داشته باشیم که مدیریت حافظه بهینه در برنامه نویسی، کلید ساخت نرمافزارهای قابل اتکایی است که کارایی بالایی هم دارند. یعنی اینکه با دقت کدنویسی کرده و همه چیز را به شکل سازماندهی شده و منظمی نگهداری کنیم تا برنامه ساخته شده مانند کتابخانهای با مدیریت عالی و روان کار کند.
بهترین تکنیک های مدیریت حافظه در برنامه نویسی
در این بخش از مطلب به بررسی بهترین تکنیکهایی میپردازیم که برای مدیریت حافظه در برنامه نویسی ارائه شدهاند. این تکنیکها را در فهرست زیر نام بردهایم.
- «استخرهای حافظه» (Memory Pools)
- «نشانگرهای هوشمند» (Smart Pointers)
- «مجموعه زباله» (Garbage Collection)
یکی از روشهای بسیار خوب مدیریت حافظه در کامپیوتر که بر عهده سیستم عامل است، به نام «صفحهبندی» (Paging) شناخته میشود. به کمک این روش، فرایندها میتوانند از فضای «حافظه مجازی» (Virtual Memory) استفاده کنند. برای آشنا شدن با این روش میتوانید مطلب صفحه بندی در سیستم عامل چیست؟ توضیح Paging به زبان ساده را از مجله فرادرس مطالعه کنید.
در ادامه مطلب، تمام موارد مورد اشاره در فهرست بالا را یک به یک از اولین مورد توضیح دادهایم.
استخرهای حافظه
«استخرهای حافظه» (Memory Pools) به فضاهای از پیش رزرو شده در حافظه میگویند. بهجای ارسال مکرر درخواست دسترسی به حافظه توسط برنامه، بلوکی از حافظه را از پیش به برنامه اختصاص داده و به اندازههای مورد نیاز تقسیم میکنیم. این تکنیک چیزی مانند رزرو کردن انبار برای ذخیره کالاها پیش از رسیدن کالا به مقصد است. زیرا در این صورت مجبور به صرف زمان و جستوجو به دنبال انبار خالی نیستیم. این روش مزایایی دارد که در فهرست زیر مورد اشاره قرار دادهایم.
- باعث افزایش سرعت در استفاده از حافظه میشود.
- از بروز سربار در حافظه جلوگیری میکند
- و مانع پراکنده شدن دادههای مورد نیاز در فضای ذخیرهسازی نیز میشود.
نشانگرهای هوشمند
«نشانگرهای هوشمند» (Smart Pointers) ابزاری هستند که حافظه را به صورت خودکار برای برنامهها مدیریت میکنند. بعد از اینکه بخشهای مورد استفاده از حافظه، تاریخ مصرفشان به پایان رسید، نشانگرهای هوشمند آن بخشهای حافظه را آزاد کرده و از نشت حافظه جلوگیری میکنند. به آنها به عنوان دستیاری فکر کنید که مسئولیت تمیزکاری را برعهده دارند. بنابراین برنامهنویس میتواند برروی کدهای خود تمرکز کند. نشانگرهای هوشمند در شکلهای مختلفی مانند Unique_Ptr و Shared_Ptr و Weak_Ptr وجود دارند. هر کدام از این موارد برای انجام وظایف مختلفی طراحی شدهاند. بنابراین به برنامهنویس کمک میکنند که به شکل سادهتری انواع کارهای خود را مدیریت کند.
Garbage Collection
«مجموعه زباله» (Garbage Collection) مانند نظافچی خودکاری برای برنامه کدنویسی شده کار میکند. وظیفه این ابزار آن است که دادههای بیاستفاده و تاریخ مصرف گذشته را پیدا کرده و از حافظه حذف کند. بنابراین برنامه نویس دیگر مجبور نیست که این کارها را شخصا انجام دهد. استفاده از Garbage Collection کدنویسی را سادهتر میکند. زیرا دیگر نیازی به دنبال کردن رد هر شیء حافظهای توسط برنامه نویس نیست. اما از آنجا که این ابزار برای انجام وظایف خود نیاز به استفاده از بعضی منابع دارد، شاید منجر به کمی کندتر شدن عملکرد کلی سیستم شود. بنابراین باید از این ابزار هوشمندانه استفاده کرد.
عیب یابی و دیباگ مشکلات مربوط به حافظه
عیب یابی و دیباگ مشکلات مربوط به حافظه نیازمند شناخت انواع مشکلات رایج است. هر چه بیشتر از قبل با مشکلات ممکن آشنا شده باشیم، راحتتر میتوان آنها را حل کرد.
در این قسمت از مطلب رایجترین ابزار و تکنیکهای رفع مشکلات احتمالی مربوط به مدیریت حافظه در برنامه نویسی را معرفی کرده و توضیح دادهایم.
- «شرححالبَرداری از حافظه» (Memory Profiling)
- «ابزار تحلیل حافظه» (Memory Analysis Tools)
- «تکنیکهای رایج دیباگ کردن حافظه» (Common Debugging Techniques)
در ادامه، هر کدام از موارد فهرست شده بالا را به صورت منظم و یک به یک بررسی کردهایم.
شرح حال بَرداری از حافظه
«شرح حال بَرداری از حافظه» (Memory Profiling) مانند به کار بردن ابزارهای خاصی برای بررسی روش استفاده از حافظه توسط برنامه است. این تکنیک به پیدا کردن مشکلات مشخصی کمک میکند. برای مثال میتوان به نشت حافظه در جاهایی که حافظه مصرف شده دیگر آزاد نشده یا موقعیتهایی اشاره کرد که میزان حافظه بسیار زیادی استفاده شدهاند. با استفاده از ابزارهای Memory Profiling میتوان این نوع از مشکلات را شناسایی کرد. در نتیجه برنامه به شکل بهینهتری از حافظه کامپیوتر استفاده میکند.
ابزار تحلیل حافظه
«ابزارهای تحلیل حافظه» (Memory Analysis Tools) مانند مربیان شخصی برای کدها عمل میکنند. این ابزارها روش استفاده برنامه از حافظه سیستم را ارتقا میدهند. به این منظور باید موارد نشت حافظه را پیدا کرده و عملکردهای آن را بهینهسازی کنند. استفاده از این ابزارها مانند داشتن دوستی است که به برنامه نویس برای خلاص شدن از مصرف حافظه زیاد و غیر ضروری کمک میکند. در نتیجه کمک این ابزار کدها سریعتر و بهتر اجرا میشوند. این ابزارها نه تنها به برنامه نویسان برای پیدا کردن مشکلات حافظه کمک میکنند، بلکه قبل از تبدیل شدن آنها به مشکلات بحرانی، برای برطرف کردنشان نیز دستبهکار میشوند.
تکنیک های رایج دیباگ کردن حافظه
وقتی نوبت به تعمیر مشکلات مربوط به حافظ و دیباگ کردن آنها میرسد، برنامهنویس باید مانند کارآگاه، دقیق عمل کند. کارهای سادهای وجود دارند که در پیدا کردن مشکلات، کمک میکنند. برای مثال میتوان به موارد فهرست زیر اشاره کرد.
- بررسی وجود نشانگرهای خالی
- آزاد کردن حافظه به طور کامل
- دوری کردن از ایجاد اشارهگرهای آویزان
برای حل مشکلات مربوط به مدیریت حافظه در برنامه نویسی باید یک به یک آنها را شناسایی و برطرف کرد. این کار کمی مشکل است، اما حتی سختترین مشکلات مربوط به حافظه در کامپیوتر را نیز میتوان با صرف زمان، صبر و استراحت ذهنی برطرف کرد.
فیلم های پروژه محور آموزش برنامه نویسی
فرایند آموزش برنامه نویسی معمولا سادهتر از آنی که تصور میشود شروع شده و سختتر از آنی که در انتظار است به نتیجه میرسد. دلیل اصلی این امر آن است که آموزشهای ابتدایی معمولا به بیان مطالب ساده پرداخته و به شکل درست، علمآموزان را برای ورود با بازار کار آماده نمیکنند. این آموزشها اصول بنیادین و زیربنای کار را یاد میدهند که هم بسیار مهماند و هم ساده. اما آموزش ترکیب تکنولوژیهای تولید محصولات نرمافزاری کاری است که معمولا باید در دورههای آموزشی پروژهمحور به دنبال آن بود. فرادرس برای پر کردن این خلاء، سِری نسبتا کاملی از فیلمهای پروژه محور آموزش برنامهنویسی را آماده کرده که چند مورد از آنها را در پایین معرفی کردهایم.
به مرور زمان، به این مجموعه، فیلمهای آموزشی بیشتری نیز افزوده میشود. در صورت تمایل برروی تصویر پایین کلیک کرده و از سایر فیلمهای تولید شده نیز دیدن کنید.
ابزارها و منابع مدیریت حافظه در برنامه نویسی
در این قسمت دو مورد از مهمترین ابزارهای مدیریت حافظه را معرفی کردهایم.
Memory Profilers
پروفایلرهای حافظه، ابزاری هستند که به عنوان دستیار برنامه نویس به نظارت بر حافظه مورد استفاده توسط برنامه میپردازند. این دستیارهای کمکی، کارهای نوشته شده در فهرست زیر را انجام میدهند.
- در درک روش استفاده از حافظه به برنامه نویسی کمک میکنند.
- محلهای افزوده شدن یا حذف حافظه را شناسایی میکنند.
- در پیدا کردن مشکلاتی مانند نشت حافظه نیز کمک میکنند.
در نتیجه استفاده از این ابزار مانند داشتن کسی است که از برنامه در مقابل هدر دادن حافظه محافظت میکند. به عنوان بعضی از پروفایلرهای حافظه شناخته شده میتوانیم از Valgrind و Instruments و Visual Studio’s Memory Profiler نام ببریم.
تحلیل گران حافظه
«تحلیلگران حافظه» (Memory Analyzers) مانند چاقوهای سوئیسی هستند. این ابزارهای همه فنحریف و جامع برای برطرف کردن مشکلات مربوط به حافظه طراحی شدهاند. تحلیلگران حافظه به برنامه نویسان برای مدیریت مسائلی مانند موارد فهرست شده در زیر کمک میکنند.
- پیدا کردن نشت حافظه
- بررسی روش استفاده از حافظه
- کشف علت رویدادن مشکلات مربوط به حافظه
- و غیره
استفاده از تحلیلگر حافظه مانند داشتن جعبهابزاری است که برای حل کردن مشکلات مربوط به حافظه شامل همه چیزهای مورد نیاز میشود. به عنوان بعضی از مشهورترین تحلیلگران حافظه میتوان به Eclipse MAT و «dotMemory» از شرکت JetBrain و WinDbg از شرکت Microsoft اشاره کرد.
جمعبندی
مدیریت حافظه در برنامه نویسی، مهارت کلیدی است که به برنامه نویسان برای ارتقا کیفیت و پایداری نرمافزارها کمک میکند. توسط مواردی مانند موارد فهرست زیر، برنامه نویسان میتوانند برنامههایشان را با بهرهوری بالاتری ایجاد کرده و از روبهرو شدن با مشکلات مربوط به حافظه جلوگیری کنند.
- شناخت انواع مختلف حافظه
- درک مشکلات رایج و تکراری
- استفاده از استراتژیهای مربوط به مدیریت صحیح حافظه
بسیار مهم است که از تکنیکها و ابزارهای مناسبی برای برطرف کردن مشکلات مربوط به حافظه استفاده کنیم. با کمک آموزش قواعد مربوط به مدیریت حافظه در برنامه نویسی و پیروی از بهترین الگوهای مطرح شده، برنامه نویسان میتوانند نرمافزارهای قابل اتکا و کارآمدی را ایجاد کنند تا برای کاربران بسیار روان کار کند.
در این مطلب از مجله فرادرس، به بررسی مبحث مدیریت حافظه در برنامه نویسی پرداختهایم. در ابتدا این مطلب را توضیح داده و سپس انواع حافظه در برنامه نویسی را به شکل کلی معرفی کردیم. در ادامه هم انواع چالشها، استراتژیها، ابزار و تکنیکهای مربوط به مدیریت حافظه را معرفی کرده و هر کدام را به صورت مجزا توضیح دادیم.
source