快查表
Lookaside(快查表):
快查表为了解决,频繁的申请和释放内存。因为频繁的申请和释放内存会造成大量的内存碎片。(例如:
内存就是一片海洋,然后用一个杯子装上一杯海水在杯子中去查找就更快一些)
非分页内存
1 void ExInitializeNPagedLookasideList( 2 PNPAGED_LOOKASIDE_LIST Lookaside, 3 PALLOCATE_FUNCTION Allocate, 4 PFREE_FUNCTION Free, 5 ULONG Flags, 6 SIZE_T Size, 7 ULONG Tag, 8 USHORT Depth 9 );
分页内存
1 void ExInitializePagedLookasideList( //初始化此结构体就可以分配内存了 2 PPAGED_LOOKASIDE_LIST Lookaside, 3 PALLOCATE_FUNCTION Allocate, 4 PFREE_FUNCTION Free, 5 ULONG Flags, 6 SIZE_T Size, 7 ULONG Tag, 8 USHORT Depth 9 );
非分页内存申请方式
1 PVOID ExAllocateFromNPagedLookasideList( 2 PNPAGED_LOOKASIDE_LIST Lookaside 3 );
分页内存申请方式
1 PVOID ExAllocateFromPagedLookasideList( 2 PPAGED_LOOKASIDE_LIST Lookaside 3 );
释放非分页内存方式
1 void ExFreeToNPagedLookasideList( 2 PNPAGED_LOOKASIDE_LIST Lookaside, 3 PVOID Entry 4 );
释放分页内存方式
1 void ExFreeToPagedLookasideList( 2 PPAGED_LOOKASIDE_LIST Lookaside, 3 PVOID Entry 4 );
删除非分页快查表(Lookaside)对象
1 void ExDeleteNPagedLookasideList( 2 PNPAGED_LOOKASIDE_LIST Lookaside 3 );
删除分页快查表(Lookaside)对象
1 void ExDeletePagedLookasideList( 2 PPAGED_LOOKASIDE_LIST Lookaside 3 );
非分页快查表代码实现
1 VOID LookAsidePaging() //非分页快查表 2 { 3 PMYDATA pData[100] = {NULL}; 4 int i = 0; 5 NPAGED_LOOKASIDE_LIST LookAsideList; 6 ExInitializeNPagedLookasideList(&LookAsideList,NULL,NULL,0,sizeof(MYDATA),"124233",0); 7 8 //向内存中存入数据 9 for (i = 0;i < 100;i++) 10 { 11 pdata[i] = (PMYDATA) ExAllocateFromNPagedLookasideList(&LookAsideList); 12 pData[i]->number = i; 13 } 14 15 for (i = 0;i < 100;i++) 16 { 17 DbgPrint("%d\n",pData[i]->number); 18 ExFreeToNPagedLookasideList(&LookAsideList,pData[i]); 19 } 20 21 ExDeleteNPagedLookasideList(&LookAsideList); 22 }
分页快查表代码实现
1 VOID LookAsideTest() //分页快查表 2 { 3 PMYDATA pData[100] = {NULL}; 4 int i = 0; 5 PAGED_LOOKASIDE_LIST LookAsideList; 6 ExInitializePagedLookasideList(&LookAsideList,NULL,NULL,0,sizeof(MYDATA),"124233",0); 7 8 9 for (i = 0;i < 100;i++) 10 { 11 pData[i] = (PMYDATA) ExAllocateFromPagedLookasideList(&LookAsideList); 12 pdata[i]->number = i; 13 } 14 15 for (i = 0;i < 100;i++) 16 { 17 DbgPrint("%d\n",pData[i]->number); 18 ExFreeToPagedLookasideList(&LookAsideList,pData[i]); 19 } 20 21 ExDeletePagedLookasideList(&LookAsideList); 22 }

浙公网安备 33010602011771号