דליפת זיכרון (Memory leak) היא מצב שבו תוכנה לא משחררת זיכרון שהקצתה באופן דינמי, למרות שאין לה עוד צורך בו.
הזיכרון התפוס נשאר בלתי זמין לתוכניות אחרות או לחלקים אחרים של התוכנית. זה עלול להאט את התוכנה ולהשפיע על המערכת, במיוחד בתוכנות שמריצים אותן זמן רב.
דליפות נפוצות בשפות שאין להן "איסוף זבל" (מערכת ששחררת זיכרון שאינו בשימוש באופן אוטומטי), כגון C ו-C++. כאשר המפתח שוכח לשחרר זיכרון שהוקצה בעזרת מצביעים, הזיכרון נשאר תפוס.
ניתן להבחין בין דליפה מינורית לדליפה חמורה. דליפה מינורית ניתנת לשחרור על ידי מערכת ההפעלה בסופו של דבר, ולכן מגודלת. דליפה חמורה מתרחשת כשאיבדנו את הדרך לשחרר את ההקצאה, למשל אחרי איפוס מצביע. במקרה כזה, כל הריצה החוזרת של הקוד מגדילה את הנזק.
מערכת ההפעלה המודרנית משחררת בדרך כלל את כל הזיכרון שתוכנית תופסת כשהיא מסתיימת. ניהול זיכרון וירטואלי גם מפחית את ההשפעות בין תהליכים, אבל לא שולל דליפות בתוך תוכנית.
שפות עם איסוף זבל חזקות יותר, כמו Java ו-Python, מורידות את הסיכוי לדליפות גדולות. אולם עדיין אפשר ליצור דליפות מסוג אחר, למשל כשאוספים (רשימה) שומרים הפניות לאובייקטים שלא צריך יותר. המערכת לא תמיד תדע שהאובייקט מיותר, ולכן לא תשחרר אותו.
בתוכנית לדוגמה מייצרים סיסמאות ונותנים לכל סיסמה זיכרון חדש. הכתובת לא נשמרת, ולכן הזיכרון לא משתחרר. אחרי כמה חזרות הזיכרון המיועד נגמר וההקצאה נכשלת.
יש כלים שמזהים דליפות, כמו Valgrind, Purify ו-Insure++. הם מתעדים את כל ההקצאות והרציונות לשחרור, ומדווחים אילו הקצאות לא שוחררו בזמן סיום הריצה. בעזרת הדו"ח המפתח יכול לתקן את הקוד. אפשר גם לממש איסוף זבל לתוכניות C/C++, אך זה אינו פתרון מושלם.
דליפת זיכרון היא כשתוכנית שוכחת לשחרר מקום בזיכרון. זיכרון הוא המקום במחשב לשמירת מידע.
אם תוכנה לא משחררת את המקום, המחשב עלול להאט או להפסיק לעבוד טוב.
חלק מהשפות עוזרות לשחרר זיכרון לבד. זה נקרא "איסוף זבל". דוגמה לשפות כאלה הן Java ו-Python.
בשפות כמו C ו-C++ המתרגם לא משחרר לבד. המפתח צריך לשחרר בעצמו. אם הוא שוכח, נוצרת דליפה.
בתוכנית שמייצרת סיסמאות נותנים זיכרון חדש בכל פעם. הזיכרון הזה לא משתחרר. אחרי זמן התוכנית לא יכולה להמשיך.
יש תוכנות שעוזרות למצוא דליפות. דוגמה אחת היא Valgrind. הן בודקות מי ביקש זיכרון ולא שחרר אותו.
תגובות גולשים