[c++, memoryallocator] verklaring van testtijden

Pagina: 1
Acties:

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 19-06 22:04

Gertjan

mmmm, beer...

Topicstarter
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:
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?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Ik denk dat het makkelijk is om inhoudelijk commentaar te geven als je wat nader uitlegd welke datastructuren en algoritmen je gebruikt. Het is zo een beetje gissen, namelijk.
Kan dit komen doordat het een void is en de testfunctie dus niet hoeft te wachten op een return zoals bij allocate?
Dat kan zeker niet; pas als de functie-aanroep afgelopen is gaat het programma dat de functie aanriep verder, ongeacht of er nu een return value is of niet.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik vind het maar een vaag topic
Vreemd genoeg duurt het alloceren elke keer even lang.
zijn je routines wel correct?
Kan dit komen doordat het een void is en de testfunctie dus niet hoeft te wachten op een return zoals bij allocate?
nee, een returnwaarde is zo goed als geen overhead

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ali_Illegali schreef op 26 September 2003 @ 15:15:

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?
Dat heeft er niets mee te maken.
void is ook een return-type, al returned ie dan niks. De calling functie wordt pas verder uitgevoerd als de callee volledig uitgevoerd is.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ali_Illegali schreef op 26 september 2003 @ 15:15:
Kan dit komen doordat het een void is en de testfunctie dus niet hoeft te wachten op een return zoals bij allocate?
Misschien moet je eerst eens wat algemene programmeerconcepten zoals multithreading gaan bestuderen voordat je aan een geavanceerd onderwerp als di begint? :?

Professionele website nodig?


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Een redelijke gok mbt de snelheid is een cache-effect. Aan het begin is de allocatie-data nog niet gecached, maar later in de test is dat wel het geval.

Overigens zou ik, gezien de C++ kennis van de TS, hem willen afraden om dit soort memory allocators te schrijven. "Geavanceerd" is misschien overdreven, maar het is zeker geen beginnersonderwerp. En als je long ipv void* gebruikt ben je toch nog een beginner.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1