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

QQ登录

只需一步,快速开始

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

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

[复制链接]

30

主题

211

回帖

2792

积分

用户组: 版主

UID
1821
精华
7
威望
69 点
宅币
2172 个
贡献
206 次
宅之契约
0 份
在线时间
482 小时
注册时间
2016-7-12
发表于 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. }
复制代码



本帖被以下淘专辑推荐:

回复

使用道具 举报

65

主题

117

回帖

1万

积分

用户组: 超级版主

OS与VM研究学者

UID
1043
精华
35
威望
789 点
宅币
8310 个
贡献
1094 次
宅之契约
0 份
在线时间
2071 小时
注册时间
2015-8-15
发表于 2017-7-14 02:00:07 | 显示全部楼层
还有啥MmAllocateContiguousMemory,可以分配物理地址连续的内存,不过不知道MmAllocateNonCachedMemory可不可以。
回复 赞! 靠!

使用道具 举报

5

主题

43

回帖

197

积分

用户组: 小·技术宅

UID
167
精华
0
威望
3 点
宅币
132 个
贡献
11 次
宅之契约
0 份
在线时间
30 小时
注册时间
2014-3-30
发表于 2017-12-28 16:20:51 | 显示全部楼层
Lookaside Lists  也算一个吧
回复 赞! 靠!

使用道具 举报

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

GMT+8, 2024-4-27 01:30 , Processed in 0.065464 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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