找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3103|回复: 2

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

[复制链接]
发表于 2017-6-12 14:00:18 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

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

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

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


  1. typedef struct _heap{
  2.   ...
  3. }heap,pheap;

  4. pheap g_heap_p;
  5. init(size_t n)
  6. {
  7.   g_heap_p = ExAllocatePoolWithTag(paged,n,0);
  8. }

  9. alloc(size_t n)
  10. {

  11. }

  12. free(void* p)
  13. {
  14.   
  15. }
复制代码


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

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

  1. void* g_heap_p;
  2. init(size_t n)
  3. {
  4. g_heap_p= RtlCreateHeap(HEAP_CLASS_1,NULL,n,n,0,NULL);
  5. }
  6. alloc(size_t n)
  7. {
  8. return RtlAllocateHeap(g_heap_p,0,n);
  9. }

  10. free(void* p)
  11. {
  12. RtlFreeHeap(g_heap_p,0,p);
  13. }
复制代码



本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2017-7-14 02:00:07 | 显示全部楼层
还有啥MmAllocateContiguousMemory,可以分配物理地址连续的内存,不过不知道MmAllocateNonCachedMemory可不可以。
回复 赞! 靠!

使用道具 举报

发表于 2017-12-28 16:20:51 | 显示全部楼层
Lookaside Lists  也算一个吧
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 09:24 , Processed in 0.035796 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表