|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+# Warmup
|
|
|
2
|
+
|
|
|
3
|
+Die Entwicklung des Speichers nach ausführen von `./malloc.py -n 10 -H 0 -p BEST -s`
|
|
|
4
|
+
|
|
|
5
|
+```
|
|
|
6
|
+ --------------- 1000
|
|
|
7
|
+ | |
|
|
|
8
|
+ | |
|
|
|
9
|
+ |-------------| 1100
|
|
|
10
|
+```
|
|
|
11
|
+
|
|
|
12
|
+```
|
|
|
13
|
+ --------------- 1000
|
|
|
14
|
+ | alloc'd |
|
|
|
15
|
+ |-------------| 1003
|
|
|
16
|
+ | |
|
|
|
17
|
+ | |
|
|
|
18
|
+ | FREE |
|
|
|
19
|
+ | |
|
|
|
20
|
+ | |
|
|
|
21
|
+ |-------------| 1100
|
|
|
22
|
+```
|
|
|
23
|
+
|
|
|
24
|
+```
|
|
|
25
|
+ --------------- 1000
|
|
|
26
|
+ | FREE |
|
|
|
27
|
+ |-------------| 1003
|
|
|
28
|
+ | |
|
|
|
29
|
+ | |
|
|
|
30
|
+ | FREE |
|
|
|
31
|
+ | |
|
|
|
32
|
+ | |
|
|
|
33
|
+ |-------------| 1100
|
|
|
34
|
+```
|
|
|
35
|
+
|
|
|
36
|
+```
|
|
|
37
|
+ --------------- 1000
|
|
|
38
|
+ | FREE |
|
|
|
39
|
+ |-------------| 1003
|
|
|
40
|
+ | alloc'd |
|
|
|
41
|
+ |-------------| 1008
|
|
|
42
|
+ | |
|
|
|
43
|
+ | FREE |
|
|
|
44
|
+ | |
|
|
|
45
|
+ |-------------| 1100
|
|
|
46
|
+```
|
|
|
47
|
+```
|
|
|
48
|
+ --------------- 1000
|
|
|
49
|
+ | FREE |
|
|
|
50
|
+ |-------------| 1003
|
|
|
51
|
+ | FREE |
|
|
|
52
|
+ |-------------| 1008
|
|
|
53
|
+ | |
|
|
|
54
|
+ | FREE |
|
|
|
55
|
+ | |
|
|
|
56
|
+ |-------------| 1100
|
|
|
57
|
+```
|
|
|
58
|
+```
|
|
|
59
|
+ --------------- 1000
|
|
|
60
|
+ | FREE |
|
|
|
61
|
+ |-------------| 1003
|
|
|
62
|
+ | FREE |
|
|
|
63
|
+ |-------------| 1008
|
|
|
64
|
+ | alloc'd |
|
|
|
65
|
+ |-------------| 1016
|
|
|
66
|
+ | FREE |
|
|
|
67
|
+ |-------------| 1100
|
|
|
68
|
+```
|
|
|
69
|
+```
|
|
|
70
|
+ --------------- 1000
|
|
|
71
|
+ | FREE |
|
|
|
72
|
+ |-------------| 1002
|
|
|
73
|
+ | alloc'd |
|
|
|
74
|
+ |-------------| 1003
|
|
|
75
|
+ | FREE |
|
|
|
76
|
+ |-------------| 1008
|
|
|
77
|
+ | FREE |
|
|
|
78
|
+ |-------------| 1016
|
|
|
79
|
+ | FREE |
|
|
|
80
|
+ |-------------| 1100
|
|
|
81
|
+```
|
|
|
82
|
+```
|
|
|
83
|
+ --------------- 1000
|
|
|
84
|
+ | FREE |
|
|
|
85
|
+ |-------------| 1002
|
|
|
86
|
+ | alloc'd |
|
|
|
87
|
+ |-------------| 1003
|
|
|
88
|
+ | FREE |
|
|
|
89
|
+ |-------------| 1008
|
|
|
90
|
+ | alloc'd |
|
|
|
91
|
+ |-------------| 1015
|
|
|
92
|
+ | FREE |
|
|
|
93
|
+ |-------------| 1016
|
|
|
94
|
+ | FREE |
|
|
|
95
|
+ |-------------| 1100
|
|
|
96
|
+```
|
|
|
97
|
+
|
|
|
98
|
+Wie man sieht hat die Fragmentierung des Speichers bzw. der Free-Liste zugenommen.
|
|
|
99
|
+
|
|
|
100
|
+# Antworten
|
|
|
101
|
+
|
|
|
102
|
+1. Wenn zwei mal ein gleich großes Speicherstück alloziiert wird, dann wird nicht das wieder freigewordene Fragment genutzt, sondern ein neues reserviert. Auch Alloziierungen von kleineren Stücken bekommen keine Teile von wieder freigegebenem Platz. Also ensteht im allgemeinen eine höhere Fragmentierung als mit **BEST**.
|
|
|
103
|
+2. Die Struktur der Free-Liste ändert sich nicht, aber es werden weniger Elemente (Speicherblöcke) gesucht, bevor die Adresse zurückgeliefert wird. Je größer die Free-Liste, desto länger dauert es, diese zu durchsuchen. Das Flag **FIRST** verkürzt also die Suchzeit und somit auch die insgesamte alloc-Zeit.
|
|
|
104
|
+3. - **ADDRSORT** sortiert die Liste mit dem freien Speicher nach der höhe der Adresse. Es verändert sich nichts zu vorher mit anderen Policies.
|
|
|
105
|
+ - Bei **SIZESORT+** sind die kleinsten *Stücke* vorne in der Liste. Bei **BEST** ist dann oft der Verschnitt, also 1-Byte-Blöcke am Anfang.
|
|
|
106
|
+ - Bei **SIZESORT-** wird die Speicherliste absteigend nach der Größe der Blöcke sortiert. Diese Sortierung ist vorteilhaft für die Policy **FIRST**, da große Blöcke direkt am Anfang gefunden werden die sehr häufig für den angeforderten Speicher ausreichen.
|