阅读:1967回复:11
关于在passthru里面使用链表结构,各位大侠指点!!!多谢
如果初始化的时候初始化一个链表头,然后定义一些增,删函数,需要的时候就调用,跟一般的链表一样,增加一项的时候分配内存,删除一项的时候释放内存,这么做是不是会导致内存泄漏呀??
如果是的话,那我有什么办法完成这项功能呢,我大概需要构造5个链表,都不大,每个不超过15项,每项不超过20byte,有没有什么办法呢? 各位大侠们,指点一下吧,小弟傻眼了!! :(多谢!! |
|
最新喜欢:baoyib... |
沙发#
发布于:2003-04-28 09:31
各位老大多多帮忙呀!!!!! :(
|
|
板凳#
发布于:2003-04-28 09:53
用你那种方法 我不认为会 内存泄漏啊
|
|
地板#
发布于:2003-04-28 09:53
用你那种方法 我不认为会 内存泄漏啊 呵呵 我也是新手
|
|
地下室#
发布于:2003-04-28 10:30
我也是这么处理的,
没有出现内存泄露啊。 我实现的时候,定义一个初始化函数, 初始化的时候,就将链表头置为空 还有一个反初始化函数 在这个函数中,将这个链表中所有指向的成员释放掉。 |
|
5楼#
发布于:2003-04-28 12:08
可以跟用户态那样来处理链表,但在分配内存及释放内存时不同罢了,
一般不会出现内存泄漏的. 我测试过的,我开了几万项都没问题. |
|
|
6楼#
发布于:2003-04-28 13:03
我分配的都是非分页内存,
因为我用的是SPIN LOCK, 在使用SPIN LOCK的不能使用分页, 我是在DDK里面看到介绍的。 非分页内存开了太多,肯定会很影响系统性能吧 |
|
7楼#
发布于:2003-04-28 13:09
内核提供链表数据结构,
找本WDM的书看看, 上面有如何用. |
|
8楼#
发布于:2003-04-28 15:29
我分配的都是非分页内存, 按你的情况开销不算太大姑计可以. 用内核提供的链表也可以, 但比较麻烦,你可以查一下以下几下函数(单链表的): InitializeListHead 初始化链表头中的LIST_ENTRY结构 InsertHeadList 在起始处插入一个元素 InsertTailList 在结尾处插入一个元素 IsListEmpty 判断链表是否为空 RemoveEntryList 删除元素 RemoveHeadList 删除第一个元素 RemoveTailList 删除最后一个元素 首先你要建立一个结构: typedef struct _TWOWAY { ... LIST_ENTRY linkfield; ... } TWOWAY, *PTWOWAY; 然后再用上述函数对它操作 更具体的请查看waltoney的书第三章. |
|
|
9楼#
发布于:2003-04-28 16:44
多谢各位!其实我还没有试,不过自己拿不准,所以问问。因为前一阵子做收发的时候,是按照huyuguang大侠当年的算法,把每收到一个包就拷贝一份,做做处理然后释放,在那里面如果忘记释放的话,是windows还没有启动好就直接蓝屏了,所以我吃不准开销不大的情况下是什么后果,所以来问问。
另外我也查到了freeshar老兄所说过的但链表结构,但是我需要查询链表的功能将反复使用,如果遍历查询的话将很郁闷,因此我希望链表中的元素是按照某项属性的大小排列的,所以需要能够对链表中间任意一个位置进行插入,用系统提供的链表能不能实现这个功能呢?这一点我一直不清楚 另外,“开销不算太大估计可以”,想问一下,多大估计就不行了? 5000byte,10000byte??? 多谢各位!!! |
|
10楼#
发布于:2003-04-28 17:23
多谢各位!其实我还没有试,不过自己拿不准,所以问问。因为前一阵子做收发的时候,是按照huyuguang大侠当年的算法,把每收到一个包就拷贝一份,做做处理然后释放,在那里面如果忘记释放的话,是windows还没有启动好就直接蓝屏了,所以我吃不准开销不大的情况下是什么后果,所以来问问。 re: 按你的要求最好是自己创建链表, 内核提供的链表以前我试过几次都没能成功;)(这里不好说),至于开销的问题,对于可分页内存是没问题的,非分页内存我也没试过,你最好自已测试,这里我不好发表看法 :( |
|
|
11楼#
发布于:2003-05-26 12:23
驱动里面最好不要不停的new delte内存
这样内存垃级比较多 ddk支持一种链表 可以自动回收内存的 |
|
|