Přidáno 2 378 bajtů,
19. 10. 2012, 23:17 =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]]