zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1967回复:11

关于在passthru里面使用链表结构,各位大侠指点!!!多谢

楼主#
更多 发布于:2003-04-27 12:23
如果初始化的时候初始化一个链表头,然后定义一些增,删函数,需要的时候就调用,跟一般的链表一样,增加一项的时候分配内存,删除一项的时候释放内存,这么做是不是会导致内存泄漏呀??

如果是的话,那我有什么办法完成这项功能呢,我大概需要构造5个链表,都不大,每个不超过15项,每项不超过20byte,有没有什么办法呢?

各位大侠们,指点一下吧,小弟傻眼了!! :(多谢!!

最新喜欢:

baoyibao99baoyib...
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-28 09:31
各位老大多多帮忙呀!!!!! :(
dana_wx
驱动牛犊
驱动牛犊
  • 注册日期2002-11-08
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-28 09:53
用你那种方法 我不认为会 内存泄漏啊
dana_wx
驱动牛犊
驱动牛犊
  • 注册日期2002-11-08
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-28 09:53
用你那种方法 我不认为会 内存泄漏啊 呵呵 我也是新手
gx_kyw
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2011-04-13
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望7点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-28 10:30
我也是这么处理的,
没有出现内存泄露啊。

我实现的时候,定义一个初始化函数,
    初始化的时候,就将链表头置为空

还有一个反初始化函数
   在这个函数中,将这个链表中所有指向的成员释放掉。

paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-28 12:08
可以跟用户态那样来处理链表,但在分配内存及释放内存时不同罢了,
一般不会出现内存泄漏的.
我测试过的,我开了几万项都没问题.

知之为知之,不知为不知 有错则改之
gx_kyw
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2011-04-13
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望7点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-28 13:03
我分配的都是非分页内存,

因为我用的是SPIN LOCK,

在使用SPIN LOCK的不能使用分页,
我是在DDK里面看到介绍的。

非分页内存开了太多,肯定会很影响系统性能吧

ljx197926
驱动牛犊
驱动牛犊
  • 注册日期2002-12-17
  • 最后登录2004-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-28 13:09
内核提供链表数据结构,
找本WDM的书看看,
上面有如何用.
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-28 15:29
我分配的都是非分页内存,

因为我用的是SPIN LOCK,

在使用SPIN LOCK的不能使用分页,
我是在DDK里面看到介绍的。

非分页内存开了太多,肯定会很影响系统性能吧

 

按你的情况开销不算太大姑计可以.
用内核提供的链表也可以, 但比较麻烦,你可以查一下以下几下函数(单链表的):
InitializeListHead 初始化链表头中的LIST_ENTRY结构
InsertHeadList 在起始处插入一个元素
InsertTailList 在结尾处插入一个元素
IsListEmpty 判断链表是否为空
RemoveEntryList 删除元素
RemoveHeadList 删除第一个元素
RemoveTailList 删除最后一个元素
首先你要建立一个结构:

typedef struct _TWOWAY
{
  ...
  LIST_ENTRY linkfield;
  ...
} TWOWAY, *PTWOWAY;
然后再用上述函数对它操作
更具体的请查看waltoney的书第三章.
知之为知之,不知为不知 有错则改之
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-28 16:44
多谢各位!其实我还没有试,不过自己拿不准,所以问问。因为前一阵子做收发的时候,是按照huyuguang大侠当年的算法,把每收到一个包就拷贝一份,做做处理然后释放,在那里面如果忘记释放的话,是windows还没有启动好就直接蓝屏了,所以我吃不准开销不大的情况下是什么后果,所以来问问。

另外我也查到了freeshar老兄所说过的但链表结构,但是我需要查询链表的功能将反复使用,如果遍历查询的话将很郁闷,因此我希望链表中的元素是按照某项属性的大小排列的,所以需要能够对链表中间任意一个位置进行插入,用系统提供的链表能不能实现这个功能呢?这一点我一直不清楚

另外,“开销不算太大估计可以”,想问一下,多大估计就不行了?
5000byte,10000byte???

多谢各位!!!
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-28 17:23
多谢各位!其实我还没有试,不过自己拿不准,所以问问。因为前一阵子做收发的时候,是按照huyuguang大侠当年的算法,把每收到一个包就拷贝一份,做做处理然后释放,在那里面如果忘记释放的话,是windows还没有启动好就直接蓝屏了,所以我吃不准开销不大的情况下是什么后果,所以来问问。

另外我也查到了freeshar老兄所说过的但链表结构,但是我需要查询链表的功能将反复使用,如果遍历查询的话将很郁闷,因此我希望链表中的元素是按照某项属性的大小排列的,所以需要能够对链表中间任意一个位置进行插入,用系统提供的链表能不能实现这个功能呢?这一点我一直不清楚

另外,“开销不算太大估计可以”,想问一下,多大估计就不行了?
5000byte,10000byte???

多谢各位!!!

re:
按你的要求最好是自己创建链表, 内核提供的链表以前我试过几次都没能成功;)(这里不好说),至于开销的问题,对于可分页内存是没问题的,非分页内存我也没试过,你最好自已测试,这里我不好发表看法 :(
知之为知之,不知为不知 有错则改之
eqinzm
驱动牛犊
驱动牛犊
  • 注册日期2001-10-18
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-05-26 12:23
驱动里面最好不要不停的new delte内存
这样内存垃级比较多
ddk支持一种链表
可以自动回收内存的
Hi
游客

返回顶部