Détection d'allocations mémoire

Détection d'allocations mémoire - C++ - Programmation

Marsh Posté le 17-06-2004 à 20:16:18    

Bonjour,
 
J'ai un programme en C++ qui utilise une fonction et je voudrais pouvoir vérifier si cette fonction effectue des allocations mémoires.
 
Je dispose de purify qui me permet de connaitre le nombre de blocs mémoire alloués par l'ensemble du programme mais pas par une seule fonction.
 
Si qqun a une idée...
 
Merci d'avance
 
Sangohan

Reply

Marsh Posté le 17-06-2004 à 20:16:18   

Reply

Marsh Posté le 17-06-2004 à 22:07:55    

Question naïve : sans remettre en cause l'utilisation d'outils comme Purify, dont l'utilité n'est pas à démontrer, qu'est-ce qui t'empêche d'obtenir cette information simplement en regardant le code de la fonction :??: (à moins justement que tu n'ai pas accès au code source).


---------------
Un matin je me lèverai et il fera beau.
Reply

Marsh Posté le 17-06-2004 à 22:44:21    

Je n'y ai pas acces, d ou la question !!

Reply

Marsh Posté le 17-06-2004 à 22:57:30    

tu regarde son code assembleur alors :D

Reply

Marsh Posté le 17-06-2004 à 22:58:47    

Ben le plus simple : tu regardes la taille de la mémoire occupée avant et après l'appel de ta fonction et tu l'écris si la différence est non nulle.

Reply

Marsh Posté le 18-06-2004 à 07:12:27    

ça ne marche pas à cause du cache de l'allocateur côté utilisateur

Reply

Marsh Posté le 18-06-2004 à 10:36:49    

Elle se trouve ou cette fonction ?
Sous quelle forme ?


Message édité par HelloWorld le 18-06-2004 à 10:37:03

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-06-2004 à 13:51:15    

On peut peut-être utiliser strace, qui dumpe tous les appels système. Il y a une version Linux et NT.

Reply

Marsh Posté le 18-06-2004 à 13:58:35    

bah new/malloc ne sont pas des appels systèmes

Reply

Marsh Posté le 18-06-2004 à 17:46:39    

tu te fait une classe de MemoryPool et tu trace ces appels avec un Watcher.

Reply

Marsh Posté le 18-06-2004 à 17:46:39   

Reply

Marsh Posté le 19-06-2004 à 00:25:06    

Merci pour vos réponses.
 

HelloWorld a écrit :

Elle se trouve ou cette fonction ?  
Sous quelle forme ?


 
Elle se trouve dans une librairie statique et je dispose de son entete dans un .hpp.
 
J'ai réussi avec les fonctions "purify_new_inuse" et "purify_new_leaks" à détecter les éventuelles fuites mémoires de ma fameuse fonction...
Mais si une allocation et la désallocation correspondante sont effectuées dans cette fonction, je ne peux pas m'en apercevoir !
 

Joel F a écrit :

tu te fait une classe de MemoryPool et tu trace ces appels avec un Watcher.


 
Peux tu expliciter un petit peu, stp ?
 
 
Merci à tous
 
Sangohan

Reply

Marsh Posté le 19-06-2004 à 12:54:05    

tu creer une classe à qui tu va déléguer la creation de ta mémoire (style Factory ou VirtualFactory). Lors de la création de tes objets ou des tes zones mémoires, tu appelles une méthode statique de ta MemoryPool en lieu et place de new et delete.
 
Ensuite pour logger tout ca, il suffit d'utiliser une classe de Watcher (dont j'ai donné le code y a pas logntemps sur ce forum).
 
cf Design Pattern par Gamma & cie pr les details.

Reply

Marsh Posté le 19-06-2004 à 12:59:22    

non mais attends, le gus il a que le binaire :o

Reply

Marsh Posté le 19-06-2004 à 13:38:10    

ah bon ok ^^ je m'en vasi alors ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed