Situatie is als volgt: ik heb een memoryallocator geschreven volgens het BestFit-algoritme in C++. Om het simpel te houden heeft de allocator 2 functies:
de allocate functie returned een long, dat is het adres waarop de data weggeschreven is.
Er is ook een testfunctie bij gemaakt, deze alloceert 1024 keer een brok geheugen en kijkt hoe lang het alloceren en de-alloceren duurt.
1. allocate (1024);
2. allocate (1023);
3. allocate (1022);
enz...
Deze testfunctie laat zien dat het in het begin van het testen relatief lang duurt en naarmate het einde in zicht komt steeds sneller gaat. Dit is te verklaren doordat er in de allocate functie een array bijgehouden wordt voor grafische representatie van het geheugen. Voor elke byte die ge-alloceerd wodt wordt er een 'X' in die array geschreven. Hierna returned hij het adres waarop het stuk ge-alloceerd is. Goed te verklaren volgens mij ...
Bij het de-alloceren wordt dus de base meegegeven, vanaf welk adres hij moet gaan verwijderen (size wordt in een map bijgehouden). Alle bytes die dan verwijderd worden worden in de array overschreven met een '-'.
Vreemd genoeg duurt het alloceren elke keer even lang.
Hoe is dit te verklaren?
Kan dit komen doordat het een void is en de testfunctie dus niet hoeft te wachten op een return zoals bij allocate?
C++:
1
2
| long BestFit::allocate(int size) void BestFit::deallocate(long base) |
de allocate functie returned een long, dat is het adres waarop de data weggeschreven is.
Er is ook een testfunctie bij gemaakt, deze alloceert 1024 keer een brok geheugen en kijkt hoe lang het alloceren en de-alloceren duurt.
1. allocate (1024);
2. allocate (1023);
3. allocate (1022);
enz...
Deze testfunctie laat zien dat het in het begin van het testen relatief lang duurt en naarmate het einde in zicht komt steeds sneller gaat. Dit is te verklaren doordat er in de allocate functie een array bijgehouden wordt voor grafische representatie van het geheugen. Voor elke byte die ge-alloceerd wodt wordt er een 'X' in die array geschreven. Hierna returned hij het adres waarop het stuk ge-alloceerd is. Goed te verklaren volgens mij ...
Bij het de-alloceren wordt dus de base meegegeven, vanaf welk adres hij moet gaan verwijderen (size wordt in een map bijgehouden). Alle bytes die dan verwijderd worden worden in de array overschreven met een '-'.
Vreemd genoeg duurt het alloceren elke keer even lang.
Hoe is dit te verklaren?
Kan dit komen doordat het een void is en de testfunctie dus niet hoeft te wachten op een return zoals bij allocate?