Memory Leaks suchen
-
Ich habe das Problem hier auch gepostet: Neulich habe ich festgestellt, dass mein Programm erheblich Speicher verliert. Von den normalerweise benötigten ~ 5MiB stegt der Verbrauch unter bestimmten, reproduzierbaren Bedingungen rapiede an, ich habe das bis zu 150MiB nachfolzogen.
Jetzt möchte ich das Problem natürlich wieder loswerden, weiß aber überhaupt nicht wie ich vorgehen soll.
Daten zum Projekt:
~20k LOC (?)
Compiler: der alte VC6, ich habe das weder auf den VC8 noch minGW portieren könnenBiblioteken:
STLPort 4.6.2 (bitter nötig mit der VC6)
DirectX 9.0c SDK / August 2006
-
Überlad halt mal den globalen Operator new/[] und delete/[]. Und du kannst ruhig MB (Megabyte) sagen. Ist zwar egtl falsch, hat sich aber eingebürgert.
-
Hilft dir denn der Debug Heap nicht?
Der sollte beim Beenden des Programmes ja schön alles auflisten was nicht freigegeben wurde. Ggf. musst du dafür selbst 2-3 Zeilen Code einfügen damit du die "Leak Liste" bekommst.Guck einfach mal in die MSDN zum Thema Debug Heap.
Wenn das Programm nicht interaktiv ist bzw. das erste Leak noch in einer nicht interaktiven Phase auftritt, kannst du einfach eine Allokationsnummer aus der "Leak Liste" bei Beenden des Programmes aufschreiben, und den Debug Heap dann bitten genau bei der Allokation in den Debugger zu hüpfen. Wie genau das alles geht steht schön in der MSDN...@David_pb: den gloablen Operator new/delete kann man nicht überladen, den kann man nur ersetzen. Und das ist mit dem lieben VC meist nicht wirklich machbar, vor allem wenn man DLLs und/oder die DLL Runtime verwendet.
-
-
mmgr ist auch gut. Link anklicken. dann auf "code" und mmgr.
edit: bzw. http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip
-
Siehe DUMA oder Valgrind
-
danke @ all
Ich werde dann mal sehen was ich usetzen kann.rüdiger schrieb:
Siehe DUMA oder Valgrind
Valgrind ist IMHO Linux - only.