140 likes | 296 Views
איסוף אשפה (Garbage collection). כותרת חילופית : ניהול זיכרון דינמי (Dynamic memory allocation) ספר בתחום :. Garbage Collection: Algorithms for automatic dynamic memory management, Richard Jones and Rafael Lins, Wiley, 1999. כמה זיכרון צורכת התוכנית הבאה ?. 3. 4. p. p. 11. 12. p. 1.
E N D
איסוף אשפה (Garbage collection) כותרת חילופית: ניהול זיכרון דינמי (Dynamic memory allocation) ספר בתחום: Garbage Collection: Algorithms for automatic dynamic memory management, Richard Jones and Rafael Lins, Wiley, 1999. כמה זיכרון צורכת התוכנית הבאה ? 3 4 p p 11 12 p 1 2 malloc malloc 7 8 malloc … malloc 5 malloc malloc 6 malloc 13 malloc 14 p 9 malloc malloc malloc 10 malloc malloc malloc סיבוכיות מקום נוסף O(n) סיבוכיות מקום O(1)
איסוף אשפה (Garbage collection) כותרת חילופית: ניהול זיכרון דינמי (Dynamic memory allocation) ספר בתחום: Garbage Collection: Algorithms for automatic dynamic memory management, Richard Jones and Rafael Lins, Wiley, 1999. כמה זיכרון צורכת התוכנית הבאה ? 3 4 p 11 12 q 1 2 7 8 q … free free 5 free free 6 13 14 free free 9 10 הבעיה: איך לשחרר צמתים שהמתכנת לא שחרר באמצעות פקודת free.
איסוף אשפה Garbage collection משתנים נוצרו בזמן ריצהע"י malloc Heap בעיית איסוף אשפה משתנים של התכנית מחסנית frame v1 קלט: v2 v3 x y פלט: z לשחרר את את צמתי האשפה ee hh אשפה :צמתים שאין אליהם מסלול מאף משתנה תכנית
איסוף אשפה Garbage collection בעיית איסוף אשפה משתנים בזמן ריצה נוצרו ע"י malloc משתני התכנית v1 קלט: v2 v3 x y פלט: z לשחרר את את צמתי האשפה ee hh ב- malloc הבא מוצאים אבר מ- AVAIL
ספירה Reference counting פתרון 1 1 1 v1 2 2 v2 1 v3 x 1 1 y 2 z 2 ee hh 1 להוסיף לכל צומת V שדה count השומר את מספר המצביעים אליו
אלגוריתם • עדכן את count של V • בכל פעם שמשנים מצביע 2. אם count של V שווה 0 שים את הצומת ב- AVAIL 1 1 v1 2 2 v2 0 1 v3 x 1 1 y 2 z 2 2 1 ee hh AVAIL 1
בעיה 1 1 v1 2 2 1 v2 1 v3 x 1 1 y 2 z 2 1 ee אין גישה למעגל hh 1
סימון Tracing collector פתרון 2 אלגוריתםDepth First Search (DFS) v1 v2 v3 x y z ee hh
אלגוריתםDepth First Search (DFS) חסרון: אלגוריתם רקורסיבי v1 v2 v3 x y z ee hh סבוכיות מקום O(n) אלגוריתם רקורסיבי משתמש במחסנית
אלגוריתםDFS ללא רקורסיה v1 v2 v3 x y z ee hh איך נדע אם המצביע מקורי? נוסיף משתנה color לכל מצביע נניח שתמיד יש מצביע לצומת הקודמת
דחיסה Compaction קלט: פלט: a b c d e f g v1 v2 v3 x y z ee hh
דחיסה Compaction פלט: a b c d e f g v1 v2 v3 x y z ee hh
שימו לב n = 7 a b c d e f g v1 v2 v3 x y 1. לספור את מספר הצמתים z ee 2. לקצות מקום hh 3. לעביר ולהחליף בכתובת 4. עדכון מצביעים
n = 7 a d b e f c g v1 v2 v3 x y 1. לספור את מספר הצמתים z ee 2. לקצות מקום hh סבוכיות מקום O(1) 3. לעביר ולהחליף בכתובת 4. עדכון מצביעים