Самоучитель по программированию систем защиты

       

Список заранее выделенных блоков памяти (Lookaside List)



Список заранее выделенных блоков памяти (Lookaside List)



Во многих случаях, выделение и освобождение временного буфера памяти должно происходить очень часто, для уменьшения накладных расходов служит Lookaside List - список заранее выделенных блоков памяти фиксированного размера.

Первоначально, память выделяется только под небольшой заголовок со служебной информацией. При каждом запросе на выделение памяти проверяется, есть ли в списке свободные блоки. Если их нет - они выделяются из выгружаемой или невыгружаемой памяти. Если есть, то помечаются, как используемые и выдаются для использования.

VOID ExInitializeNPagedLookasideList(

IN PNPAGED_LOOKASIDE_LIST Lookaside,

IN PALLOCATE_FUNCTION Allocate OPTIONAL,

IN PFREE_FUNCTION Free OPTIONAL,

IN ULONG Flags,

IN ULONG Size,

IN ULONG Tag,

IN USHORT Depth ); . VOID ExInitializePagedLookasideList(

IN PPAGED_LOOKASIDE_LIST Lookaside,

IN PALLOCATE_FUNCTION Allocate OPTIONAL,

IN PFREE_FUNCTION Free OPTIONAL,

IN ULONG Flags,

IN ULONG Size,

IN ULONG Tag,

IN USHORT Depth );

PVOID ExAllocateFromNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside) ; PVOID ExAllocateFromPagedLookasideList(IN PPAGED_LOOKASIDE_LIST Lookaside); VOID ExFreeToNPagedLookasideList(

IN PNPAGED_LOOKASIDE_LIST Lookaside,

IN PVOID Entry); VOID ExFreeToPagedLookasideList(

IN PPAGED_LOOKASIDE_LIST .Lookaside,

IN PVOID Entry);

VOID ExDeleteNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside);

VOID ExDeletePagedLookasideList(IN PPAGED_LOOKASIDE_LIST Lookaside) ;



Содержание раздела