Ayala 发表于 2017-6-12 14:00:18

【C】windows驱动中的 几种内存池

本帖最后由 Ayala 于 2017-6-12 14:01 编辑

有时候我们需要在驱动中使用内存池

用的比较多的可能是这个 ExAllocatePoolWithTag 之后自己定义内存结构来自己维护
伪代码


typedef struct _heap{
...
}heap,pheap;

pheap g_heap_p;
init(size_t n)
{
g_heap_p = ExAllocatePoolWithTag(paged,n,0);
}

alloc(size_t n)
{

}

free(void* p)
{

}


然后是mdl 自带的内存管理结构 MmAllocatePagesForMdl
之前发过ramdisk就是使用的这种方式 不过汇编写的

接下来就是ring3 ring0可以源代码兼容的 RtlCreateHeap RtlAllocateHeap RtlFreeHeap

void* g_heap_p;
init(size_t n)
{
g_heap_p= RtlCreateHeap(HEAP_CLASS_1,NULL,n,n,0,NULL);
}
alloc(size_t n)
{
return RtlAllocateHeap(g_heap_p,0,n);
}

free(void* p)
{
RtlFreeHeap(g_heap_p,0,p);
}



唐凌 发表于 2017-7-14 02:00:07

还有啥MmAllocateContiguousMemory,可以分配物理地址连续的内存,不过不知道MmAllocateNonCachedMemory可不可以。

FFFFFFFE 发表于 2017-12-28 16:20:51

Lookaside Lists也算一个吧
页: [1]
查看完整版本: 【C】windows驱动中的 几种内存池