Piszę mały garbage collector (mark-and-sweep) do mojej wirtualnej maszyny i utknąłem właściwie na początku:
W jaki sposób w Lazarusie pobrać ilość zaalokowanej/przydzielonej bibliotece pamięci?
Odnalazłem funkcje GetHeapStatus
oraz GetFPCHeapStatus
, lecz problem jest taki, że GC działa sobie w osobnym wątku, więc obydwie funkcje zwracają dane dla wątku GC, a nie ogólnie programu (czy raczej stricte samej biblioteki SSVM), zatem na nic mi to :/
Tak więc pytanie brzmi: jak pobrać ilość pamięci przydzielonej mojej bibliotece z poziomu jej samej? Najlepiej, aby rozwiązanie było przenośne pomiędzy systemami, ponieważ celuję właśnie w niezależność od systemu.
Myślałem nad napisaniem małego własnego memory-managera i skorzystania z SetMemoryManager
, lecz z tym byłoby w cholerę roboty...
0
0
http://www.freepascal.org/docs-html/rtl/system/getmemorymanager.html
GetHeapStatus: function: THeapStatus;
GetFPCHeapStatus: function: TFPCHeapStatus;
http://www.freepascal.org/docs-html/rtl/system/theapstatus.html
http://www.freepascal.org/docs-html/rtl/system/tfpcheapstatus.html