Přeskoč navigaci

FastMM

FastMM je asi nejlepší memory manager pro Delphi prakticky všech verzí. Proč?

Pro jeden svůj velký projekt používám Delphi 5 a nedávno jsem i u něj začal používat FastMM a zároveň jsem provedl nějaké testy.

Pár slov mimo: Delphi pro alokaci veškeré paměti používají vlastní memory manager, ale umožňují aby programátor použil svůj vlastní manager. Těch existuje několik. Původní memory manager byl vyvinut v době Windows 95 a byl mnohem lepší než správa paměti ve Windows 95. Tento manager byl jako standardní použit pro Delphi 2 - 7. Ve verzi Delphi 2006 byl nahrazen právě FastMM protože paměťové poměry jsou od dob Windows 95 jiné (více paměti atd.).

FastMM od autora Pierre le Riche je tedy open source správce paměti pro Delphi. Ale není to jen tak nějaký správce paměti. Jedná se o tři různé správce paměti v jednom + detekce neuvolněné paměti nebo naopak pokus o vícenásobné uvolnění. Detekce je aktivní jen při běhu z IDE.

FastMM rozlišuje mezi třemi velikostmi alokovaných bloků a podle velikosti použije jednu ze tří možností.

Velké bloky (>260K) jsou alokovány přímo operačním systémem a je požadována jejich alokace od vrchu adresového prostoru (kvůli fragmentaci).

Střední (< 260K) a malé (<2.5K) jsou alokovány odspodu. Střední bloky jsou alokovány od OS v blocích 1.25M a jsou FastMM zpravovány jako pool a vráceny aplikaci jak potřebuje. Při uvolňování z aplikace jsou tyto bloky testovány na volné sousedy a spojovány, ale nejsou vraceny hned OS.

Ale většina alokací jsou malé bloky (instance tříd a spol.) - autor tvrdí že až 99%. Zjednodušeně tyto alokace FastMM nespojuje, ale udržuje seznamy uvolněných bloků podle velikosti a podle potřeby je zase vrací aplikaci. Toto velmi šetří čas.

Velmi užitečné je i odchytávání neuvolněných (nebo špatně uvolněných) bloků paměti. Při ukončení programu při běhu z IDE lze zapnout výpis neuvolněných bloků (a při zapnutí FullDebug módu i s adresami kde k problému došlo).

Praktické zrychlení závisí na typu programu. Podle mých zkušeností se jedná tak o 3 - 30% v závislosti na způsobu jak program intenzivně používá paměť.

Jako jeden z testů jsem použil 10x načtení cca 1M XML souboru přes TJclSimpleXML ze starší verze JVCL.

program basic;
{$APPTYPE CONSOLE}
uses
  fastMM4, SysUtils, Windows, JclSimpleXml;

var
  oXML:TJclSimpleXML;
  iTick, iTickEnd, x: Cardinal;
begin
  iTick := GetTickCount;
  for x:= 1 to 10 do
  begin
    oXML := TJclSimpleXML.Create();
    try
      oXML.LoadFromFile('testFastMM.xml');
    finally
      FreeAndNil(oXML);
    end;
  end;  
  iTickEnd := GetTickCount;
  Writeln(Format('Ticks: %d', [iTickEnd - iTick]));
end.

Testovací programy se liší jen v uses kde fastMM4 zapíná FastMM. Nic jiného se nemění. Znovu opakuji, že z IDE jsou aktivní detekce leaků a tj. memory manager neběží na plný výkon.

V uvedeném případě byl počet tiků pro verzi s FastMM cca 6000 a bez FastMM cca 9000. Ale toto byl velmi extrémní případ.

Jaggni to|Linkuj

Komentáře k tomuto článku



Prosím o dodržovaní určitých pravidel (tj. žádné neslušné texty, reklamy a tak prostě podobně). Komentáře porušující tyto pravidla budou odstraněny.

Před vložením komentáře je nutno provést náhled, jedná se o ochranu proti spamu.

 

Vložení komentáře
  
 
 

 

© NetCode.cz, 2006-9 | Všechna práva vyhrazena
Provozováno na mém pikoCMS, vygenerováno: 24.11.2017 6:44:42

O mně

Informace o mé maličkosti a kontakt.

Lokální tagy

amd(1) amiga(1) apple(1) aspnet(2) audio(1) borland(5) C64(1) codegear(12) delphi(39) dotnet(9) dvd(1) electone(1) embarcadero(1) emulator(11) firebird(2) flash(1) freepascal(5) gamecube(3) gigabyte(2) google(3) hardware(48) holografie(1) homebrew(29) hry(12) ibm(14) iphone(7) jidlo(1) komponenty(1) konzole(15) latex(1) lenovo(17) migrace(1) modchip(3) moje(9) mplayer(3) mssql(1) multi-touch(3) native-api(1) navody(23) nintendo(53) Nintendo3DS(2) nintendo64(6) NintendoDS(15) onestation(2) opera(1) ot(1) palm(1) pascal(1) pdf(1) pic(2) pmd85(1) pocitace(1) print-server(2) programovani(21) programy(25) R400(1) recenze(6) retro(1) satelit(1) seamonkey(5) snes(3) svepomoci(1) technika(1) thinkpad(20) usb(1) video(3) vs(3) vykriky(12) web(7) webdesign(8) wii(83) wiimote(13) wiiware(1) wiki(2) windows(7) windows-mobile(1) wl500g(2) wtf(8) zivot(1) ZX-Spectrum(5)