AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variants / Strings / Memory Leaks

Ein Thema von Gruber_Hans_12345 · begonnen am 26. Apr 2005 · letzter Beitrag vom 19. Okt 2005
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.438 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
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.438 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Variants / Strings / Memory Leaks

  Alt 27. Apr 2005, 04:06
Hab ihn, den "Bug"

Da gibts ne Funktion, die einen variant in einen anderen kopiert, und dabei ab und zu direkt die Daten des variants überschreibt, daher wird dann in diesem Fall _LStrClr nicht aufgerufen und deshalb auch der RefernzZähler nicht runtergezählt.

Dank geht übrigens an motzi für das wirklich gute Tutorial über Strings (Motzi's Homepage)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Variants / Strings / Memory Leaks

  Alt 27. Apr 2005, 16:05
Oh.. die Firma dankt!!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
125 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Variants / Strings / Memory Leaks

  Alt 19. Okt 2005, 11:54
Dieser Leak scheint auch in JVInterpreter noch zu existieren. Zumindest bekomme ich den Leak #1 auch angezeigt, wenn ich mein Programm mit memproof teste.

Ich habe mir auch mal die alte RaLib besorgt. Die Funktion zum Kopieren von Variants hat sich nicht entscheidend geändert:


procedure RAI2VarCopy(var Dest: Variant; const Source: Variant);
begin
if TVarData(Source).VType in [varArray, varRecord] then
TVarData(Dest) := TVarData(Source)
else
Dest := Source;
end;


Erinnerst Du Dich noch an den Bugfix und kannst ihn hier veröffentlichen?
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Variants / Strings / Memory Leaks

  Alt 19. Okt 2005, 12:43
Mmh. Interessant. Mit Pascal Script und memCheck hab ich auch unerklärliche Speicherlecks bei Strings. Könnte vielleicht damit zusammenhängen ... Deshlab hoffe ich auf eine Lösung
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.438 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Variants / Strings / Memory Leaks

  Alt 19. Okt 2005, 17:18
hmmmm, dachte es war in der funktion, aber ist es nicht,
wo hast du dir den alten RAI runtergeladen ?

Dann kann ich mal nen Filecompare machen (mit dem neuem JVInterpreter findet er zu viele Unterschiede, da ja die Klassen anders heißen)

Oder häng die zwei Files RAI2.pas und RAI2Parser.pas hier an.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
125 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Variants / Strings / Memory Leaks

  Alt 19. Okt 2005, 17:30
Die RaLib 1.6 habe ich hier geladen:

http://www.ciemmesoft.com/componenti...1&ORD=1&QTA=10

Evtl. hast Du aber eine andere als Basis genommen?

Du könntest auch Deine Version als PN schicken, dann vergleiche ich es.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz