Toon posts:

[C++/GCC] Totale grote van heap object achterhalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Weet iemand toevallig of het mogelijk is om met gcc te achterhalen waar de begin positie is van een object op de heap aan de hand van een pointer.

Ik heb deze functionaliteit nodig voor een garbage collector die ik aan het schrijven ben. Ik wil dit zo doen dat ik geen speciale overerving nodig heb voor de gc. Dit doe ik door de new operator te overschrijven. Hier reserveer ik 4 extra bytes vooraan het object voor de reference counter. Echter kom ik in de knoei met het controleren van deze counter. Bij standaard objecten kan je gewoon 4 bytes eerder in het geheugen kijken. Echter bij gebruik van multiple inheritance en casting kan de pointer ergens halverwege het object zitten en kan ik niet simpelweg 4 bytes naar voren kijken.

Voor de duidelijkheid nog een voorbeeldje :)
- Er zijn 3 klassen, A, B en C. Klasse C erft van zowel A als B.
- Wanneer er een object van C aangemaakt wordt reserveerd de new operator 4 bytes extra vooraan het gehele object.
- In het geheugen staat dus achtereenvolgens: {reference counter},{klasse A},{klasse B},{klasse C}
- Wanneer het object gecast wordt naar klasse B zal er een gat ter grote van klasse A tussen de pointer en de reference counter zitten. Maar dit kan ik dus niet detecteren :'( Vandaar dat ik een functie zoek die ik gewoon de pointer kan voeren en die het begin adres van het object weer terug geeft.

Ik hoop dat jullie iig het verhaal nog kunnen volgen :D en misschien zelfs een oplossing hebben.

Edit: Ik zie dat ik mijn titel vergeten ben te veranderen. Moet eigenlijk zijn: "Begin adres van heap object achterhalen"

[ Voor 5% gewijzigd door Verwijderd op 20-02-2006 22:09 ]