Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Speicherverwendung analysieren

  Alt 27. Jun 2012, 10:05
Praktisch gesehn und da es in Delphi (eigentlich) keine zentrale Stelle gibt, wo reservierter Speicher "registriert" wird, kann man im Nachhinein garnicht feststellen was sich in welchem Speicherbereich befindet.

Nimm dir einfach mal sowas wie Integer, Records oder ein Array[x..y] of Char. Da hast du nur den Daten-Inhalt im RAM rumliegen, aber nirgendwo ist die RTTI direkt damit verknüpft.
(z.B. 4 Byte im Speicher können also ganz gut ein Integer, 4 Bytes, 2 Words, ein Array[0..3] of AnsiChar oder auch garnichts sein, da diese 4 Bytes grade nicht benutzt werden)

Man kann höchstens über windige und nicht immer zuverlässige Tests versuchen rauszufinden, ob es sich z.B. um ein Objekt handet. Seit D2009 könnte man eventuell auch noch AnsiStrings und UnicodeStrings erkennen. (alles immer schön mit der Chance auf viele False-Positives)

Man könnte den FastMM in den FullDebug-Modus versetzen, oder sich selbst dazwischenhängen, dann jeweils beim reservieren von Speicher sich den Stacktrace, bzw. die Rücksprungadresse ansehn, und bekommt so mit wer und von wo die Anfrage kommt, worüber man besser erkennen kann, um was es sich handelt, da der Speicher von Strings und Objekten ja standardmäßig in ganz bestimmten Prozeduren/Methoden reserviert wird.
Wenn man sich diese infos dann alle merkt, dann könnte man auch später oftmals noch gut erkennen was von wo kam.
Es gibt da auch schon ein irgendwelche Frameworks, welche einem dabei helfen. (Ich glaub vor Kurzem war auch was zum Speicheranalysieren hier in der DP zu finden)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jun 2012 um 10:10 Uhr)
  Mit Zitat antworten Zitat