نشت حافظه

نشت حافظه یعنی مصرف بیش از اندازه حافظه در جهت اجرای دستورات یک برنامه. از مهم‌ترین ضعف‌هایی که باعث نشت حافظه می‌شود، نبود Garbage Collection (جمع‌آوری آشغال) خودکار در زبان برنامه‌نویسی است. زبان‌هایی مثل C و C++ در معرض مستقیم نشت حافظه قرار دارند. عموما زمانی نشت حافظه روی می‌دهد که حافظه تخصیص داده شده به یک نرم‌افزار، غیرقابل آدرس‌دهی باشد.
کد خبر: ۲۸۵۲۹۵

این مشکلات که از‌ آن به‌عنوان باگ‌های نرم‌افزاری سیستم یاد می‌شود، باعث ایجاد نرم‌افزارهای دیباگی شد که روی حافظه فعالیت می‌کردند و این نشت‌ها را تشخیص می‌دادند. نرم‌افزارهایی چون BoundsChecker، Valgrind، Insure++ و memwatch برخی از همین ابزارهای دیباگ بودند.

زبان‌های جاوا، ‌سی‌شارپ، لیسپ و VB.NET قابلیت جمع‌آوری خودکار آشغال را دارند، اما در مقابل نشت حافظه مصون نیستند. برای مثال ممکن است یک برنامه در یک حلقه نامتنهای، اشیایی با رفرنسی از جنس خود بسازد که باعث می‌شود بخش زیادی از حافظه از دسترسی خارج گردد.

نشت حافظه، به‌طور کلی با الگوریتم زیر به‌سادگی قابل درک خواهد بود:

فرض کنید که ما اکنون روی پله‌ شماره X ایستاده‌ایم و هدف، پله شماره Y است. الگوریتم به‌این صورت انجام می‌شود که وقتی دکمه‌ای فشار داده شد

تکه‌ای حافظه تخصیص داده شود و برای به‌خاطر سپردن شماره پله استفاده شود.

شماره پله داخل آن بخش از حافظه قرار داده شود.

آیا روی پله هدف ایستاده‌ایم؟

اگر چنین است، کاری برای انجام دادن نیست. پایان.

در غیر این‌صورت:

تا زمانی که پاها آزاد شوند باید صبر کنیم.

به پله مورد نظر برویم و حافظه‌ای که دریافت کرده‌ایم را آزاد کنیم.

در نگاه اول الگوریتم بدون نقص به‌نظر می‌رسد، اما وقتی دقت کنیم، در صورتی که 200 بار پیغام درخواست به ماندن در همان پله اعلام شود، از آن‌جایی که در حالت درستی شرط، حافظه را آزاد نکرده‌ایم، 200 خانه حافظه، بدون رفرنس باقی خواهد ماند و نشت عظیمی رخ خواهد داد.

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها