Einzelnen Beitrag anzeigen

Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#1

Variants / Strings / Memory Leaks

  Alt 26. Apr 2005, 22:59
Hallo,
Nutze Delphi 6.0 mit RAInterpreter (frühe Form vom JVCL Interpreter), die allerdings schon stark abgeändert wurde, und deshalb kann ich auch nicht auf JVCL Interpreter umsteigen (das mal vorweg)

Ich habe nun bemerkt, das ich eine Reihe von Memory Leaks bekomme (habe mir mal die Trial von AQtime runtergeldane)

Es sieht so aus, als ob die Speicherleaks vom Delphi internen Stringhandling herkommen. (zumindest kommt es definitiv nicht von einem GetMem, einer TClass.Create oder sonstiges sondern vielleicht von einem vergessenen variant String? (falls es soetwas gibt))

Leak #1
Delphi-Quellcode:
[ParseToken] TokenStr1 := Parser.Token; // TokenStr1 ist string
[Token] SetString(Result, F, P-F); // F und P sind PChar, Result ist string
[LStrFromPChar]
[NewAnsiString]
das in den Eckigen Klammern sind die Funktionen (von LStrFromPChar und NewAnsiString kennt er nicht die unit, wird wohl system.pas sein)


und das 2. Leak ist bei
Delphi-Quellcode:
[ParseToken] Token1 := Copy(TokenStr1, 2, Length(TokenStr1) - 2); // Token1 .. variant, TokenStr1 .. string
[LstrCopy]
[LStrFromPCharLen]
[NewAnsiString]
Ich habe mir mal die Variants Funktionen angeschaut, und was der Compiler beim kopieren von strings macht, man sieht eigentlich nur das wenn ein Variant String in einen anderen Variant kopiert wird, der Dest zuerst auf null gesetzt wird, und dann die Pointer kopiert werden.
Daher müsste eigentlich Delphi irgendwo mitführen wieviele Instancen von einem Variant String vorhanden sind und dann bei Bedarf den String freigeben (nachdem die letzte Instanz auch auf null gesetzt wird) Oder ?

Hat jemand genauere Info's, damit ich weiß, wo ich suchen (und debuggen und memproofen) kann.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat