HeapBlock

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání

Proměnné haldy

HeapBlock, HeapError, HeapLimit a HeapList, HeapAllocFlags, HeapEnd, HeapOrg, HeapPtr


Správce haldy používá proměnné HeapList, HeapLimit, HeapBlock a HeapError k implementaci alokačních rutin dynamické paměti. Proměnná HeapLimit definuje práh mezi "malými" a "velkými" bloky heapu. Proměnná HeapBlock definuje velikost haldy, který používá správce, když alokuje bloky, které mají být přiřazeny do sub-alokátoru.


Neměli byste mít důvod měnit hodnoty HeapLimit a HeapBlock, ale pokud se tak stane, dbejte na to, aby HeapBlock byl nejméně čtyřikrát větší než velikost HeapLimit.


Proměnná HeapError vám dovolí instalovat vlastní chybovou funkci haldy, která je volána pokaždé, když správce haldy není schopen splnit požadavek na alokaci.

HeapError je ukazatel na funkci s následující hlavičkou:

   function HeapFunc (Size: Word): Integer; far;

Chybová funkce haldy se instaluje přiřazením její adresy do proměnné HeapError:

   HeapError := @HeapFunc;

Tato funkce se pak volá pokaždé, když New nebo GetMem nejsou schopny provést požadovanou alokaci. Parametr Size obsahuje velikost požadovaného bloku paměti a chybová funkce by se měla pokusit uvolnit blok minimálně této velikosti. Před voláním chybové funkce se správce haldy pokusí alokovat blok ve své sub-alokační volné paměti i přímým voláním funkce GlobalAlloc z Windows.


Funkce HeapError vrací:

  • 0 znamená selhání, které bezprostředně způsobí výskyt běhové chyby
  • 1 znamená úspěšné provedení a návrat (poté může následovat další volání této funkce).
  • 2 znamená úspěšné provedení a návrat (poté může následovat další volání této chybové funkce).

Implicitní hodnota HeapAllocFlags je gmem_Moveable. HeapEnd, HeapOrg, HeapPtr jsou ukazatele na konec, začátek haldy a do haldy.


Proměnné haldy pro Windows
HeapList
HeapLimit
HeapBlock
HeapAllocFlags
HeapError


Proměnné haldy pro reálný režim
HeapEnd
HeapOrg
HeapPtr
HeapError


Proměnné haldy pro chráněný režim
HeapList
HeapLimit
HeapBlock
HeapAllocFlags