Hallo liebe
DP!
Ich bin gerade auf etwas gestoßen, das mich etwas verwirrt.
Wenn ich diesen Code ausführen lasse, und ich die Messageboxen auswerte, dann komme ich zu dem Ergebnis, dass das neue Byte, das ich mir hole, hinten in nagelneuem Speicher angesetzt wird.
(In der zweiten MessageBox ist FreeSmall=TotalFree dagegen FreeBig, Unused sind 0)
Komischerweise gibt es beim erneuten Aufruf des Codes im Selben aufruf wieder die ursprüngliche anzahl.
Woran liegt das? Wie kann ich die "FreeSmall" Blöcke ausnutzen? Bin ich vlt. völlig auf dem Holzweg und diese Methode ist gar nicht geeignet zur analyse des heaps???
Hier der Code, schonmal danke im Vorraus fürs Helfen.
Delphi-Quellcode:
var
HeapStatus:THeapStatus;
buf:PByteArray;
begin
HeapStatus:=getHeapStatus;
with HeapStatus do
ShowMessage('TotalAddrSpace :'+IntToStr(TotalAddrSpace)+#13+
'TotalUncommitted :'+IntToStr(TotalUncommitted)+#13+
'TotalCommitted :'+IntToStr(TotalCommitted)+#13+
'TotalAllocated :'+IntToStr(TotalAllocated)+#13+
'TotalFree :'+IntToStr(TotalFree)+#13+
'FreeSmall :'+IntToStr(FreeSmall)+#13+
'FreeBig :'+IntToStr(FreeBig)+#13+
'Unused :'+IntToStr(Unused)+#13+
'Overhead :'+IntToStr(Overhead)+#13+
'HeapErrorCode :'+IntToStr(HeapErrorCode));
buf:=AllocMem(1);
HeapStatus:=getHeapStatus;
with HeapStatus do
ShowMessage('TotalAddrSpace :'+IntToStr(TotalAddrSpace)+#13+
'TotalUncommitted :'+IntToStr(TotalUncommitted)+#13+
'TotalCommitted :'+IntToStr(TotalCommitted)+#13+
'TotalAllocated :'+IntToStr(TotalAllocated)+#13+
'TotalFree :'+IntToStr(TotalFree)+#13+
'FreeSmall :'+IntToStr(FreeSmall)+#13+
'FreeBig :'+IntToStr(FreeBig)+#13+
'Unused :'+IntToStr(Unused)+#13+
'Overhead :'+IntToStr(Overhead)+#13+
'HeapErrorCode :'+IntToStr(HeapErrorCode));
FreeMem(buf);
end;
Gruß, Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!