(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