Taille de libération mémoire

Résolu
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010 - 5 oct. 2005 à 21:29
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 6 oct. 2005 à 01:00
Bonjour,



Je voudrai savoir si il existe un moyen de récuperer la taille mémoire que va libérer la fonction free ?



Voila en faite j'aimerai surcharger les fonctions new et delete pour
pouvoir obtenir des infos sur la mémoire dynamique dans mon programme.
pour le "new" pas de probleme la taille est passée en paramètre mais
pour le delete non. une solution serait d'utiliser une table de hachage
en faisant correpondre une taille avec une addresse alloué. mais je
trouve ce procédé lourd et je pense qu'il doit avoir un moyen plus
pratique ? ( sinon comment fait la fonction free() ? ).



Merci.

3 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
6 oct. 2005 à 01:00
Salut,

Quelqu'un avait posté une source ici (impossible de la retrouver..) qui resolvait ce probleme.

En fait ca consiste a allouer sizeof(int) octets de plus que la taille du bloc a allouer, pour y noter la taille du bloc.

Lors de la liberation, tu as alors acces a cette taille..



par exemple pour l'allocation:

void *ptr = malloc(taille + sizeof(int));

*((int*)ptr) = taille;

return ptr + sizeof(int);



et pour la liberation:

ptr -= sizeof(int);

int taille = *((int*)ptr);

free(ptr);



en gros la technique ressemble à ca...
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2005 à 23:04
free ou delete libèrerea la taille demandée lors du malloc ou new, bizzare ta question.

ciao...
BruNews, MVP VC++
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
5 oct. 2005 à 23:24
ce que j'aimerai faire c'est :



stattic unsigned int MemDyn = 0;



void* operator new ( size_t taille )

{

MemDyn += taille;

return malloc( taille );

}



void operator delete( void* ptr )

{

MemDyn -= ??? // j'aimerai récupérer la taille qui va être désallouer par free

free( ptr );

}

Voili,Voilou
0
Rejoignez-nous