Speicher nutzung

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
JKnill
Beiträge: 16
Registriert: Mo 14. Mär 2011, 15:46

Speicher nutzung

Beitrag von JKnill »

Hallo

ich habe ein kleines Problem mit der dem Freigeben von Speicher

Code: Alles auswählen

fHeap := GetHeapStatus;
  fmemory:=fHeap.TotalAllocated;
  Writeln('Heap : '+intTostr(fmemory)+'  OLDMem : '+IntToStr(fOldMem)+' Mem: '+intTostr(fmemory-fOldMem));
  fOldMem:=fHeap.TotalAllocated;
 
  xml:= TXMLDocument.Create;
 
  fHeap := GetHeapStatus;
  fmemory:=fHeap.TotalAllocated;
  Writeln('Heap : '+intTostr(fmemory)+'  OLDMem : '+IntToStr(fOldMem)+' Mem: '+intTostr(fmemory-fOldMem));
  fOldMem:=fHeap.TotalAllocated;
 
  xml.Free;
 
  fHeap := GetHeapStatus;
  fmemory:=fHeap.TotalAllocated;
  Writeln('Heap : '+intTostr(fmemory)+'  OLDMem : '+IntToStr(fOldMem)+' Mem: '+intTostr(fmemory-fOldMem));
  fOldMem:=fHeap.TotalAllocated;    
also nachdem ich das XMLObjekt erzeugt habe brauche ich logischer weise mehr speicher ( hier sind es 1520 byte )
aber nachdem ich es wider Freigegeben habe sollte doch der Speicher wieder gleich sein wie vor der Erzeugung des objekts?
Es wird aber nur 1344 byte freigegeben!

kann mir jemand sagen was ich da falsch mache ?

LG Jürgen

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Speicher nutzung

Beitrag von corpsman »

also viel einfacher machst du es wenn du die Unit "Heaptrc" einbindest, das kannst du bequem über Projekt -> Projekteinstellungen -> Compilereinstellungen -> Debuggen machen.

Einfach nen hacken machen, neu kompilieren und nach dem Beenden deiner Anwendung sehen wie viele "Unfreed Blocks" es gibt. Steht da dann 0 ist alles i.o.
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Speicher nutzung

Beitrag von Socke »

JKnill hat geschrieben:also nachdem ich das XMLObjekt erzeugt habe brauche ich logischer weise mehr speicher ( hier sind es 1520 byte )
aber nachdem ich es wider Freigegeben habe sollte doch der Speicher wieder gleich sein wie vor der Erzeugung des objekts?
Es wird aber nur 1344 byte freigegeben!
Du machst nichts falsch. Der gesamte Speicher wird bei Programmende freigegeben (mit Unit heaptrc überprüft). Die Ursache ist der Speicher-Manager (memory manager). Dieser liegt zwischen dem Betriebssystem und deinem Programmcode. Dieser behält beim Freigeben von Speicher ein wenig davon zurück um damit neue Anfragen schneller bearbeiten zu können. Solch ein Vorgehen ist grundsätzlich schneller, als für jede Anforderung und Freigabe von Speicher das Betriebssystem zu belästigen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten