مدیریت حافظهمدیریت حافظه در برنامه نویسی ⚡️ سه سطح مهم در مدیریت حافظهاین مقاله عالی سه سطح مهم در مدیریت حافظه یعنی مدیریت حافظه در سطح سختافزار، مدیریت حافظه در سطح سیستم عامل و مدیریت حافظه در سطح برنامه را معرفی کرده یکی از بخشهای مهم در هر زبان برنامه نویسیزبان های برنامه نویسی چیست؟این مقاله عالی توضیح داده که زبان های برنامه نویسی چیست؟ و انواع زبان های برنامه نویسی و بهترین زبان برنامه نویسی برای شروع و پردرآمدترین آنها را معرفی کرده است. زبان برنامه نویسیبرنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟در عصر فعلی برنامهنویسی یکی از پرطرفدارترین شغلهای دنیاست، دغدغهای افرادی که میخواهند در مسیر برنامهنویس شدن قدم بردارند این است که نمیدانند از کجا باید شروع کنند، در این صفحه هر آن چه برای تبدیل شدن به یک برنامه نویس حرفه ای نیاز دارید در اختیارتان قرار گرفته است سی شارپسی شارپ چیست ⚡️سی شارپ به زبان سادهاین صفحه عالی بررسی کرده که سی شارپ چیست و تاریخچه سی شارپ، محیط و ابزارهای سی شارپ، ویژگی های سی شارپ، مزایای سی شارپ و کاربرد و بازار کار سی شارپ را گفته نیز مستثنی از این قضیه نیست. مدیریتکردن حافظه یک امر مهم از لحاظ پرفورمنس و کارایی هر برنامه کامپیوتری است. مدیریت حافظه بهینه این اطمینان را میدهد که برنامه ما از منابعی که دراختیار دارد، به طور کارآمد استفاده میکند و از هرگونه نشتی حافظه (Memory Leak) یا کندشدن برنامه و همچنین خطای Out of Memory جلوگیری میشود. در زبان برنامه نویسی سی شارپ، عملیات مدیریت حافظه برعهده سیستمی با نام Garbage CollectionGarbage Collection(GC) چیست و چگونه کار میکند؟این مقاله عالی بررسی کرده که Garbage Collection(GC) چیست و چگونه کار میکند؟ و مزایای Garbage Collection و انواع روش های Garbage Collection را معرفی کرده یا زباله روب است کهبه طور خودکار، حافظهحافظه در کامپیوتر، همه چیز در مورد حافظه در معماری کامپیوتردر این مقاله به بررسی کامل حافظه در کامپیوتر، انواع حافظه در کامپیوتر، کش، روشهای آدرس دهی کش، نگاشت آدرس و موارد دیگر میپردازیم را مدیریت میکند. این کار باعث میشود تا توسعهدهندگان تمامی تمرکزشان بر روی نوشتن کدها باشد، بدون این که نگران مدیریتکردن حافظه به صورت دستی باشند. برخلاف زبانهایی مانند سی پلاس پلاسبرنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده که در آن عملیات مدیریت حافظه به صورت دستی انجام میشود، زبانهایی مانند جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است، سی شارپ و پایتونزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون (Python) چیست؟ این مقاله عالی به بررسی دلایل محبوبیت پایتون، موارد استفاده از پایتون و نحوه شروع به برنامه نویسی پایتون پرداخته، نیازی به مدیریت دستی حافظه ندارند و تمامی کارها به صورت خودکار انجام میشود.
از آن جاییکه مدیریت حافظه در زبان سی شارپ برعهدهی Garbage Collector است، تمرکز اصلی ما دراین مقاله بر روی تکنیکها و عملکرد این سیستم میباشد. اما قبل از واردشدن بهبحث مدیریت حافظه، نیاز است تا با دو مورد از ساختمان دادهآموزش ساختمان داده و الگوریتمهر ساختمان داده یک نوع فرمت ذخیرهسازی و مدیریت دادهها در کامپیوتر است، که امکان دسترسی و اصلاح کارآمد آن دادهها را برای یکسری از الگوریتمها و کاربردها فراهم میکند، در این صفحه به بررسی و آموزش ساختمان داده و الگوریتم پرداخته شده استای که در حافظه برنامههای سی شارپ استفاده میشود یعنی پشتهساختمان داده پشته ⚡️ پشته چیست؟ کاربرد پشته در ساختمان دادهاین مقاله عالی توضیح داده که پشته چیست و کاربرد پشته در ساختمان داده چیست، همچنین نحوه کارکرد پشته، پیاده سازی پشته و عملیات های پشته را معرفی کرده (Stack) و هیپدرخت هیپ (heap) چیست؟ آموزش هیپ در ساختمان دادهاین صفحه عالی به آموزش هیپ (heap) در ساختمان داده پرداخته و اعمالی که در هرم قابل انجام است و مزایا و معایب حافظه Heap و مثال کدنویسی از Heap را آورده (Heap) آشنا شوید.
تخصیص و عدم تخصیص حافظه
همانطورکه گفته شد دو ساختمانداده پشته و هیپ برای تخصیص دادهها استفاده میشود.
پشته در مقابل هیپ
حافظه پشته برای ذخیره انواع مقداری یا Value Typeها مورد استفاده قرار میگیرد. انواع مقداری مانند پارامترهای یک متد و متغیر متغیر در برنامه نویسی چیست ⚡️انواع متغیر در برنامه نویسیاین صفحه عالی بررسی کرده متغیر در برنامه نویسی چیست و انواع متغیر در برنامه نویسی را معرفی و مراحل کار با متغیر، نحوه تعریف و قوانین نامگذاری متغیرها را گفته های محلی همانند int, float, decimal, double و یا ارجاعاتی که از هیپ به آن داده میشود است. درحالیکه از حافظه هیپ برای ذخیره انواع ارجاعی یا Reference Typeها استفاده میشود. انواع ارجاعی مثل آبجکتهای ایجاد شده از کلاسها و یا آرایهآموزش آرایه در ساختمان داده به زبان ساده و از 0 تا 100در این مقاله موارد زیر بررسی شده است : 1- آرایه چیست 2- انواع اندیس گذاری در آرایه 3- انواع آرایه 4- محاسبه آدرس در آرایه 5- محاسبه شماره در آرایه 6- آرایه در برنامه نویسی 7- مزایای استفاده از آرایه ها؛ بهطور خاص Garbage Collector مسئول مدیریت حافظه هیپ است.
درکد زیر، چندنمونه از مثالهای ذخیره در حافظه پشته و هیپ را مشاهده میکنید:
int a = 42; // نوع مقداری
int b = a; // ایجاد کپی از یک نوع مقداری
b = 13; // مقدار a تغییری نمیکند
MyClass objA = new MyClass(); // نوع ارجاع
MyClass objB = objA; // ایجاد یک ارجاع جدید به آبجکت قدیمی
objB.SomeProperty = 7; // تغییرات دو هر دو آبجکت objA و objB تاثیر میگذارد
دوره برنامه نویسی سی شارپ
نمونه فیلمهایی از جلسات برنامه نویسی سی شارپ
عملکرد Garbage Collection
سیستم Garbage Collector بخشی از فریم ورک NET. است که مسئول تخصیص حافظه به برنامههای NET. است و توسط CLR یا Common Language Runtime شرکت مایکروسافت مدیریت میشود. برنامه نویسان C#سی شارپ چیست ⚡️سی شارپ به زبان سادهاین صفحه عالی بررسی کرده که سی شارپ چیست و تاریخچه سی شارپ، محیط و ابزارهای سی شارپ، ویژگی های سی شارپ، مزایای سی شارپ و کاربرد و بازار کار سی شارپ را گفته هیچ وقت نیازی ندارند تاعملیات تخصیص و عدم تخصیص حافظه را به صورت دستی انجام دهند؛ بنابراین هیچ کلمه کلیدی مثل Delete برای حذف آبجکتها وجود ندارد و تمامی این موارد به Garbage Collector سپرده شده است.
هدف اصلی Garbage Collector، پاککردن دادههایی از حافظه Heap است کهمدتهاست ازآن استفاده نشده و درواقع قابل دسترس (Reachable) نیستند. این که کدام آبجکت باید حذف شود به وسیله یک سری الگوریتمالگوریتم چیست به زبان ساده و با مثال های فراواندر این مقاله به زبان بسیار ساده و با مثال های متعدد توضیح داده شده که الگوریتم چیست و چه کاربردهایی دارد هاییکه جلوتر معرفی میکنیم مشخص میشوند.
الگوریتم های Garbage Collection
الگوریتم های زیادی توسط Garbage Collection استفاده میشود که در این قسمت میخواهیم به چهار الگوریتم اصلی آن بپردازیم:
- الگوریتم Mark و Sweep
- الگوریتم Copying
- الگوریتم Generational
- الگوریتم Compaction
الگوریتم Mark و Sweep
این الگوریتم همانطور که از نامش پیداست ازدو فاز نشانهگذاری (Mark) و جاروکردن (Sweep) ساخته شده است.
- فاز Mark: دراین فاز، GC گرافگراف چیست، آموزش گراف از 0 تا 100 توسط دانشجو ارشد صنعتی شریفدر این مقاله تمامی مطالب مربوط به گراف از 0 تا 100 تدریس شده است. مواردی همچون : گراف چیست؟ انواع گراف، گراف همبند، مکمل گراف، گراف کامل، گراف جهت دار، گراف بدون جهت، گراف ساده و ... آبجکتها را از ریشه آنها پیمایش میکند و آبجکتهایی که قابلدسترس یا Reachable هستند را نشانهگذاری میکند.
- فاز Sweep: دراین فاز GC بهاصطلاح حافظه را Sweep میکند؛ یعنی آبجکتهایی که نشانهگذاری نشدهاند را پاک میکند. بدینوسیله میزان حافظه خالی بیشتر میشود.
درتصویر زیر، فاز بعد از اجرای الگوریتم زباله روبی را مشاهده میکنید:
الگوریتم Copying
این الگوریتم حافظه را به دوقسمت مساوی تقسیم میکند. وقتی یک شئ یا آبجکت ازکلاسی ایجاد و به آن مقداری تخصیص داده شد، آن آبجکت در نیمه اول حافظه قرار میگیرد. وقتی Garbage Collection شروع به کار کرد، آبجکتهایی که Reachable هستند به نیمه دوم حافظه نصفشده کپی میشوند و هرچه در نیمه اول حافظه باقی ماند پاک میشود.
الگوریتم Generational
شاید بتوان گفت از مهمترین الگوریتمی که در Garbage Collection وجود دارد، این الگوریتم است. برای رسیدن به کارایی بالاتر جهت آزادسازی حافظه، حافظه هیپ به قسمتهایی به نام "نسلها" یا Generations تقسیم میشود. بهطورکلی 3 نسل وجود دارد، نسل 0، نسل 1 و نسل 2؛ ایده نسلبندی در واقع بسیارساده است: هرچه آبجکت موجود درحافظه هیپ بیشتر دردسترس باشد، وارد نسلهای بالاتری میشود. آبجکتهایی که اخیرا وارد هیپ شدهاند در دور بعدی زباله روبی Unreachable درنظر گرفته میشوند. این الگوریتم از مراحل زیر تشکیل شده است:
- وقتی آبجکتی ساخته شد، در نسل 0 یا Gen 0 قرار میگیرد.
- وقتی Gen 0 پرشد، GC عملیات زباله روبی را اجرا میکند. درحین اجرای عملیات، تمامی آبجکتهای Unreachable دراین قسمت، از حافظه هیپ پاک میشوند و تمامی آبجکتهای دردسترس به یک نسل بالاتر ترفیع پیدا میکنند؛ یعنی وارد Gen 1 میشوند. عملیات مربوط به Gen 0 بهطور سریعی انجام میشود.
- وقتی Gen 1 پرشد، عملیات زباله روبی مربوط به Gen 1 اجرا میشود. همانند Gen 1، تمامی آبجکتهای دردسترس به Gen 2 ترفیع پیدا میکنند و عملیات Gen 0 مجدداً شروع میشود.
- وقتی Gen 2 پرشد، GC عملیات مربوط به تمامی نسلها را اجرا میکند (Full Garbage Collection). ابتدا عملیات مربوط به Gen 2 انجام میشود و سپس عملیات Gen 1 و Gen 0؛ بنابراین دراین قسمت تمامی آبجکتهای Reachable زنده میمانند و Unreachableها حذف میشوند. اگر با انجام اینکار، همچنان حافظه کافی برای تخصیصهای جدید وجود نداشت، GC یک استثنا ازنوع OutOfMemory برمیگرداند. درتصویر زیر این مراحل را مشاهده میکنید:
الگوریتم Compaction
قبلاز این که به بررسی این الگوریتم بپردازیم، ابتدا باید مفهوم قطعه قطعه شدن یا Fragmentation را بدانیم.
Fragmentation چیست؟
درطول عملیات تخصیص و عدم تخصیص یا آزادسازی حافظه، قسمتهایی از حافظه با اندازههای مختلف خالی میماند، درواقع این امر به دلیل وجود فرآیندها و آبجکتهایی با سایزهای مختلف اتفاق میافتد. ازآنجایی که اولین حافظه خالی به آبجکت یا فرآیندی تخصیص مییابد، درنتیجه بعداز تخصیص و آزادسازی حافظه در طول زمان، قسمتهای ناپیوسته خالی درحافظه به وجود میآید که امکان تخصیص دادن آنها میسر نیست. به این پدیده قطعه قطعه شدن یا Fragmentation میگویند. درحین اجرای عملیات Garbage Collection در سی شارپ، علاوه بر فاز Mark و Sweep، یک فاز دیگری با نام Compaction انجام میشود. این فاز بعد از دوفاز قبل اجرا میشود و به این صورت است که قسمتهای تخصیص دادهشده را درکنارهم قرار میدهد؛ بنابراین حافظههای خالی به صورت پیوسته درکنار همدیگر قرار میگیرند و امکان تخصیص آنها وجود خواهد داشت.
اجرای Garbage Collection به صورت دستی
در زبان سی شارپ، Garbage Collector درزمانهای تعیین نشده به صورت غیرقطعی یا Non-Deterministic عملیات زباله روبی را اجرا میکند؛ به این معنی که در زمانهای معین نشده، GC اجرا میشود و شروع به Collect کردن آبجکتهای زباله میکند. زمانهای اجرا شدن GC مشخص نیست و برنامه نویس هم نمیتواند زمان آن را تعیین کند.
اگرچه زمان اجرا شدن Garbage Collection مشخص نیست، اما برنامه نویسان میتوانند Garbage Collector را مجبوربه اجرای عملیات کنند. اینکار به وسیله عبارت ( )GC.Collect انجام میشود؛ همچنین این متد به شما این اجازه را میدهد تا نسلی را که میخواهید عملیات روی آن انجام شود، مشخص کنید. بهعنوان مثال اگر بخواهید عملیات را بر روی نسل 0 یا Gen 0 اجرا کنید، مینویسید:
GC.Collect(0);
این کد عملیات GC را برروی جوان ترین نسل اجرا میکند. حال اگر بخواهید عملیات زباله روبی را بر روی پیرترین یا Old ترین نسل یعنی نسل 2 اجرا کنید، باید بنویسید:
GC.Collect(2);
درصورتی که بخواهید عملیات زباله روبی را بدون درنظر گرفتن نسل، برروی تمامی آبجکتها انجام دهید، کافیاست هیچعددی را بهعنوان پارامتر مشخص نکنید؛ مانند کد زیر:
GC.Collect();
بهصورت کلی پیشنهاد میشود کهاز ( )GC.Collect استفاده نکنید؛ زیرا باعث ایجاد مشکلاتی در پرفورمنس برنامه میشود. Garbage Collector طوری طراحی شده است که به صورت خودکار و درزمان Non-Deterministic وظایفش را انجام دهد؛ بنابراین بهترین رویکرد این است که در کار GC مداخله نکنیم و بگذاریم کارش را انجام دهد.
مزایای Garbage Collection در سی شارپ
همانطورکه دراول مقاله گفته شد، مهمترین بخش مدیریت حافظه در سی شارپ بهوسیله سیستم Garbage Collection انجام میشود. لیستی از مهمترین مزایای این سیستم به طور خلاصه درزیر جمعآوری شده است:
- Garbage Collection به صورت کارآمد عملیات تخصیص آبجکتها درون حافظه هیپ به وسیله رویکرد نسلها را انجام میدهد.
- هیچ نیازی به آزاد کردن حافظه به صورت دستی نیست و تمامی آزادسازیها به صورت خودکار به وسیله Garbage Collector صورت میپذیرد.
- Garbage Collection عملیات تخصیص حافظه را بهصورت ایمن انجام میدهد؛ بنابراین محتوای هیچ آبجکتی بهطور اشتباه با آبجکتهای دیگر قاطی نمیشود.
- سازندههای آبجکتهایی که جدیدتر ساخته میشوند، نیازی ندارند تا تمامی فیلدهای داده را مقداردهی اولیه کنند، چراکه Garbage Collection حافظه را ازآبجکتهاییکه قبلتر آزاد شدهاند خالی کرده است.
گوگل اسکولار
گوگل اسکالر یا اسکولار google scholar ابزاری است که هر دانشجو و پژوهشگری باید با آن آشنا باشد. همانگونه که افراد به دنبال هر مطلبی که هستند آن را گوگل ...125,000 تومان250,000 تومان50% تخفیفبرنامه نویسی پایتون
پایتون (Python) یا پایتان یک زبان برنامه نویسی چند منظوره و سطح بالاست که بطور بسیار گسترده ای مورد استفاده برنامه نویسان و غیر برنامه نویسان قرار میگیرد. پایتون در ...330,000 تومان660,000 تومان50% تخفیفآموزش مقاله نویسی
مقالهنویسی یکی از مهمترین مهارتهای حوزه پژوهش و تحقیق است. دورههای تحصیلات تکمیلی در ایران مانند بسیاری دیگر از کشورهای دنیا پژوهش محور است. ...225,000 تومان450,000 تومان50% تخفیفهوش مصنوعی برای همه
همانطوری که از عنوان دوره مشخص است، این دوره فناوری مدرن، جذاب و پرحاشیه هوش مصنوعی را به زبانی ساده و قابلفهم برای تمام مخاطبین، با هر سن و میزان ...150,000 تومان300,000 تومان50% تخفیفاپلای برای همه
این روزها خیلی از دانشجویان به فکر ادامه تحصیل در خارج از کشور هستند. در این دوره به زبان ساده کارهایی ضروری برای اپلای یا مهاجرت تحصیلی خارج از کشور ...250,000 تومان500,000 تومان50% تخفیفبلاکچین برای همه
همانطوری که از عنوان دوره مشخص است، این دوره فناوری مدرن، جذاب و پردرآمد بلاکچین را به زبانی ساده و قابلفهم برای تمام مخاطبین، با هر سن و میزان تحصیلات ...150,000 تومان300,000 تومان50% تخفیف
نمونه فیلمهای دورههای مهارتی
جمعبندی
یکی از مهمترین قسمتهای برنامه نویسی و اجرای برنامههای کامپیوتری، مدیریت کردن حافظه آنهاست. زبانهای مختلفی وجود دارند که رویکرد مدیریت کردن حافظه درآنها به شیوههای مختلفی صورت میپذیرد. هرچند که سیستم Garbage Collection سیستمی است که در اکثر زبان های برنامه نویسی به نحو متفاوتی پیادهسازی شده است و از قدمت بالایی برخوردار است. دربسیاری از زبان های برنامه نویسی سطح بالا، نیازی به مدیریت کردن حافظه به صورت دستی وجود ندارد. البته میتوان به صورت دستی نیز تخصیص و عدم تخصیص حافظه را انجام داد؛ اما پیشنهاد سازندگان این سیستم این است که تا جای ممکن از انجام دستی مدیریت حافظه درزبانهایی مثل سی شارپ و جاوا خودداری شود. دراین مقاله به بررسی سیستم مدیریت حافظه در سی شارپ و الگوریتمهای معروف مدیریت حافظه پرداختیم و دیدیم که چگونه Garbage Collection از انواع تکنیکها استفاده میکند تا مدیریت حافظه را به نحو احسن انجام دهد.
مدیریت حافظه در سی شارپ چیست؟
به عملیات تخصیص و عدم تخصیص حافظه به آبجکتهای ایجادشده در سی شارپ کهبه وسیله سیستم Garbage Collection و به صورت خودکار انجام میشود، مدیریت حافظه میگویند.
آیا عملیات Garbage Collection به دست برنامه نویس انجام می شود؟
هرچند که برنامه نویس میتواند در اکثر کارهای Garbage Collection مداخله کند، اما هیچ نیازی بهانجام کارها به صورت دستی وجود ندارد و Garbage Collection به صورت خودکار تمامی عملیات مدیریت حافظه را کنترل میکند.