【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);
}
还有啥MmAllocateContiguousMemory,可以分配物理地址连续的内存,不过不知道MmAllocateNonCachedMemory可不可以。 Lookaside Lists也算一个吧
页:
[1]