(Garbage collection) איסוף אשפה (Dynamic memory allocation) ניהול זיכרון דינמי : כותרת חילופית Garbage Collection: Algorithms for automatic dynamic memory management, Richard Jones and.

Download Report

Transcript (Garbage collection) איסוף אשפה (Dynamic memory allocation) ניהול זיכרון דינמי : כותרת חילופית Garbage Collection: Algorithms for automatic dynamic memory management, Richard Jones and.

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