AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?
Thema durchsuchen
Ansicht
Themen-Optionen

FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

Ein Thema von Rob09 · begonnen am 18. Dez 2010 · letzter Beitrag vom 21. Dez 2010
Antwort Antwort
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 18. Dez 2010, 14:04
Hi!

Ich benutze den aktuellen FastMM und möchte gerne Expected Memory Leaks registrieren. Konkret sind es die häufig beschriebenen (z.B. http://www.delphigroups.info/2/11/761098.html) Leaks, die in Delphi6 leider Standard sind.

Dabei würde ich diese gerne mit Hilfe der Funktion
Code:
function RegisterExpectedMemoryLeak(ALeakedPointer: Pointer): Boolean; overload;
registrieren.

Mein Problem: Woher bekomme ich den Pointer??? Ich verstehe es nicht so ganz

Wäre sehr dankbar für eure Hilfe!

Beste Grüße!
Robert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#2

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 18. Dez 2010, 15:10
Der Zeiger gibt das erste Byte an (also den Begin eines Speicherblocks), für welches du die Leckbehandlung abschalten willst.
Delphi-Referenz durchsuchenGetMem, Delphi-Referenz durchsuchenNew und Co. liefern z.B. solche Pointer.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#3

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 19. Dez 2010, 15:55
Okay, danke für die Aufklärung - aber wie bekomme ich denn konkret den Pointer, den ich brauche (d.h. die Pointer auf die erwähnten Lecks)?
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 19. Dez 2010, 21:00
Delphi-Referenz durchsuchenAddr liefert auch solche Pointer. Du musst nur als Parameter das Speicherleck angeben.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#5

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 20. Dez 2010, 05:38
Okay, ich checks grad nicht. Wie gebe ich denn als Paramterer das Speichleck an? D.h. was ist das Speicherleck?

Ich verstehe es so: Wenn ich z.B. weiß, dass ich ein Objekt erstelle, z.B.
Code:
MyObject := TMyObject.Create;
und es nicht mehr freigebe, dann wäre dies mein Speicherleck - oder?

D.h. dann müsste ich quasi sowas wie
Code:
RegisterExpectedMemoryLeak(MyObject);
machen, oder?

Oder müsst es dann eben
Code:
RegisterExpectedMemoryLeak(Addr(MyObject));
heißen?

Und jetzt nochmal konkret zu den von Delphi 6 standardmäßig erzeugten Lecks - wie handhabe ich es denn da? Da weiß ich ja nicht, wo und wie die erzeugt werden...

Vielen Dank für eure Geduld
Robert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#6

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 20. Dez 2010, 06:40
Delphi-Referenz durchsuchenAddr gibt die Adresse (Pointer) zur Variable und nicht zum Inhalt.
RegisterExpectedMemoryLeak(Addr(MyObject)); registriert also die Variable MyObject,
wärend RegisterExpectedMemoryLeak(MyObject); das Objekt selber registriert.

PS: Es wird nur die Objektinstance und nichts Anderes im Objekt Enthaltenes registriert.
Delphi-Quellcode:
var
  S: String;
  C: TStrings;

ReportMemoryLeaksOnShutdown := True;
S := IntToStr(123456); // damit auch wirklich eine Stringvariable im Speicher erzeugt wird
C := TStringList.Create;
C.Add(S);
RegisterExpectedMemoryLeak(C);
Hier wäre also die TStringList nicht mehr im Log, aber der String im Objekt schon.


Und jetzt nochmal konkret zu den von Delphi 6 standardmäßig erzeugten Lecks - wie handhabe ich es denn da? Da weiß ich ja nicht, wo und wie die erzeugt werden...
Tja, das ist das Problem.
Wenn du nicht an die Variablen rankommst, wo diese "Speicherlecks" verwaltet werden oder an entsprechende Zeiger, dann kannst du dieses nicht registrieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#7

AW: FastMM4 - RegisterExpectedMemoryLeak - Wie Pointer heraufinden?

  Alt 21. Dez 2010, 15:39
Jetzt hab ichs verstanden - vielen Dank für die Erklärung und das Beispiel!

Schade nur, dass das Problem dann wohl nicht zu lösen ist

Schöne Feiertage und einen guten Rutsch !
Robert
  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 01:14 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