مدیریت حافظه در ++C – راهنمای جامع


در این مقاله با مدیریت حافظه در ++C به روشی بهینه با استفاده از عملیات حذف/اضافه آشنا خواهیم شد. مدیریت حافظه در ++C زیر مجموعه مدیریت حافظه در برنامه نویسی است. برای مطالعه بخش قبلی این سری مقالات آموزشی روی لینک زیر کلیک کنید:
از آرایهها میتوان برای ذخیرهسازی چندین داده همگن استفاده کرد، اما استفاده از آرایه چندین عیب دارد. در زمان اعلان یک آرایه میتوان حافظه را تخصیص داد، اما در اغلب موارد مقدار دقیق حافظه تا زمان اجرا قابل تشخیص نیست. بهترین کاری که در این حالت میتوانیم انجام دهیم، این است که آرایهای با بیشینه حافظه مورد نیاز اعلان کنیم. عیب این کار آن است که حافظه استفاده نشده به هدر میرود و نمیتواند از سوی برنامههای دیگر استفاده شود. برای اجتناب از این هدر رفت حافظه، میتوان حافظه مورد نیاز را در زمان اجرا با استفاده از عملگر new و delete در ++C به صورت دینامیک تخصیص داد.
مثال 1: مدیریت حافظه در ++C
برنامه ++C برای ذخیرهسازی GPA مربوط به n عدد از دانشجویان و نمایش آن در حالتی که n تعداد دانشجویان وارد شده از سوی کاربر باشد:
خروجی
Enter total number of students: 4 Enter GPA of students. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Displaying GPA of students. Student1:3.6 Student2:3.1 Student3:3.9 Student4:2.9
در این برنامه تنها حافظه مورد نیاز برای ذخیرهسازی num، که از سوی کاربر وارد شده، تعداد دادههای اعشاری است که به صورت دینامیک اعلان شده است.
عملگر new
این عبارت در برنامه فوق یک اشارهگر به بخشی از حافظه بازگشت میدهد که به قدر کافی برای نگهداری عدد num دادههای اعشاری کافی است.
عملگر delete
زمانی که حافظه با استفاده از عملگر delete تخصیص یافت، باید مجدداً آزاد شده و در اختیار سیستم عامل قرار گیرد. اگر برنامه از مقدار زیادی از حافظه با استفاده از new استفاده کند، سیستم ممکن است از کار بیافتد، زیرا برای عملکرد صحیح سیستم عامل حافظهای باقی نمیماند. عبارت زیر حافظه را مجدداً در اختیار سیستم عامل قرار میدهد:
براکت ها ([]) نشاندهنده این هستند که آرایه حذف شده است. اگر لازم باشد یک شیء منفرد را حذف کنید، نیازی به استفاده از براکت نیست:
مثال 2: مدیریت حافظه در ++C
در کد زیر از رویکرد شیءگرا برای مدیریت برنامه فوق در ++C استفاده شده است:
خروجی این برنامه همانند برنامه فوق است. هنگامی که شیء s ایجاد میشود، سازنده فراخوانی میشود که حافظهای برای دادههای اعشاری num تخصیص میدهد. هنگامی که شیء تخریب میشود، یعنی زمانی که شیء از دامنه برنامه خارج میشود، تخریبگر به صورت خودکار فراخوانی خواهد شد.
این تخریبگر دستور ;delete[] ptr را اجرا کرده و حافظه را مجدداً در اختیار سیستم عامل قرار میدهد.
برای مطالعه قسمت بعدی از این مجموعه مطالب آموزشی میتوانید روی لینک زیر کلیک کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامه نویسی C++
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش ++C — راهنمای شروع یادگیری
- مجموعه آموزشهای پروژه محور C#
==