Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » MemorylLeak detection unter WinXP

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.03.2006, 17:49 Uhr
(un)wissender
Niveauwart


Hallo, wie findet ihr Speicherlöcher eurer Programm unter WinXP?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.03.2006, 18:04 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Logisches Denken, Kritisches Durchsehen des Quellcodes, Analyse des Speicherverbrauchst meines Programmes bei steigender Laufzeit und steigender Anzahl durchgeführter Aktionen, Debugger.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.03.2006, 18:40 Uhr
ao

(Operator)



Zitat von (un)wissender:
Hallo, wie findet ihr Speicherlöcher

sch***e

Im Ernst: Das wichtigste ist, sie gar nicht erst entstehen zu lassen. Dazu muss man den Überblick behalten:

* Wann immer es geht, fertige und vertrauenswürdige Smartpointer, Containerklassen etc. verwenden.
* Für die Fälle, wo das nicht geht: Speicherverwaltung vom restlichen Code trennen, damit ein testbares und debugbares Heap-Modul entsteht. Da kann man dann auch Debug-Ausgaben, Logfile-Ausgaben oder Ähnliches einbauen, mit denen man Fehlern leichter auf die Spur kommt, natürlich nur, wenn das Heap-Modul konsequent verwendet wird.
* Daher zum Anfordern und Freigeben von Speicher aus der Applikation heraus nur dieses Heap-Modul verwenden, keine eingestreuten new- oder delete-Statements schreiben.

Das gilt zumindest dann, wenn Objekte erzeugt werden, die länger leben als ein paar Codezeilen. Objekte mit lokaler Lebensdauer sollten möglichst als Stack-Objekte erzeugt werden.

Wenn das nicht möglich ist (z.B. Anzahl erst zur Laufzeit bekannt) und wenn man sich sicher ist, den Code zu überblicken (wenige Zeilen nur!) und wenn auch sonst nichts dagegen spricht, kann man eine Ausnahme machen und Objekte direkt mit new holen und mit delete wieder loslassen. Aber das muss die Ausnahme bleiben und darf nicht aus Bequemlichkeit immer wieder gemacht werden.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.03.2006, 20:02 Uhr
(un)wissender
Niveauwart


Ich weiß. Ich hatte in meinem Code auch noch *nie* Leaks. Benutze immer smartpointer und muss darum auch nahezu nie delete schreiben.
Aber ich muss mit einer Lib arbeiten und die ist übel. Gib ca. nur ein Drittel der Objekte wieder frei. Ich habe zum Glück den Code (der grausam ist) und nun bin ich am suchen. einiges habe ich schon gefunden, aber das ist noch mehr.

Geil war z.B.


C++:
while (itor != endCell())
{        
  cell = static_cast<scpModelCell*>(*itor);
  ++itor;
  delete cell ;    
  (*itor)=cell=0; //Iterator ist schon inkrementiert!
};



Da wird natürlich nur der erste Pointer gelöscht, alle anderen sind 0. Toll bei 10.000senden Objekten.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.03.2006, 20:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, du kannst ne memleak-detection einprogrammieren, zumindest mit VC

schau dir crtdbg.h an ;-)

achja da gibts ein sample "crt_dbg1" in der msdn
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.03.2006 um 20:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: