Otevřít hlavní menu

Změny

HeapBlock

Přidáno 2 378 bajtů, 20. 10. 2012, 00:17
Vytvorená stránka „=Proměnné haldy= HeapBlock, HeapError, HeapLimit a HeapList, HeapAllocFlags, HeapEnd, HeapOrg, HeapPtr Správce haldy používá prom...“
=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]]


[[Category:System]]
[[Category:Proměnné_System]]