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

中间层驱动可以分配多大的memory不泄漏啊??牛人指点一下!版主看过来^_^

楼主#
更多 发布于:2003-05-08 19:35
passthru改的程序,win2k下,偶要做链表,链表么,就是不能保证在这个线程结束前释放。
那么偶现在要用NdisAllocateMemory分配两类内存:
1。拷贝包用的,比如在ptreceive里面分配一个2k的,拷贝收到的包,然后将自己拷贝的包交给上层,传递之后释放。
2。链表的元素,符合特定条件就增加表项,就分配内存,符合特定条件就释放表项,就free内存。不过都是没准的,不保证线程内一定可以释放干净

那么对于这两类内存的分配范围有什么限制呢,比如要不内存泄漏的话,每一类最大能到多少呢??各位大侠指点啊!!!! :(

[编辑 -  5/21/03 by  zuozi]

最新喜欢:

sword3isword3... baoyibao99baoyib...
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-20 20:44
没人回答么??斑竹啊,出来帮帮我吧!!!!^_^
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2003-05-21 02:42
没人回答么??斑竹啊,出来帮帮我吧!!!!^_^


这个问题和核心毫无关系。

建议找一本c语言进阶来看。

你就当是在写app,在用malloc分配内存好了。

不再回忆从前,我已经生活在幸福当中。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
地板#
发布于:2003-05-21 02:43
passthru改的程序,win2k下,偶要做链表,链表么,就是不能保证在这个线程结束前释放。
那么偶现在要用NdisAllocateMemory分配两类内存:
1。拷贝包用的,比如在ptreceive里面分配一个2k的,拷贝收到的包,然后将自己拷贝的包交给上层,传递之后释放。
2。链表的元素,符合特定条件就增加表项,就分配内存,符合特定条件就释放表项,就free内存。不过都是没准的,不保证线程内一定可以释放干净

那么对于这两类内存的分配范围有什么限制呢,比如要不内存泄漏的话,每一类最大能到多少呢??各位大侠指点啊!!!! :(


内存泄露和分配的大小毫无关系。


不再回忆从前,我已经生活在幸福当中。
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-21 10:23
呵呵,偶真是幸运,遇到了hu大侠这位传说中的人物^_^

偶现在用的是NdisAllocateMemory, MemoryFlags用的是0,也就是说分配的是nonpaged system-space memory。

其实偶也没有真正碰到内存泄漏,因为偶实际上写了一个路由算法,然后保存了一些路由信息和缓存的任务信息,偶现在只发送了一两个任务测试了一下,发现没有问题,但是欧们实验要求是10多台机器组成一个网络来跑任务测性能,将来缓存的东西就会比较多,而那些缓存时所分配的内存是不能即时释放的。
  
  偶们实验室一个老师说这种方式当我分配的内存超过4k的时候,就会由于ndis找不准页边界而出错了 :mad:

hu大侠能否赐教?确实是这样么??多谢!!!
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-22 10:50
没有人理么??自己顶^_^
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-22 15:04
你申请4k的内存看看再说。

问问你们老师是怎么知道这些规定的。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2003-05-26 04:57
呵呵,偶真是幸运,遇到了hu大侠这位传说中的人物^_^

偶现在用的是NdisAllocateMemory, MemoryFlags用的是0,也就是说分配的是nonpaged system-space memory。

其实偶也没有真正碰到内存泄漏,因为偶实际上写了一个路由算法,然后保存了一些路由信息和缓存的任务信息,偶现在只发送了一两个任务测试了一下,发现没有问题,但是欧们实验要求是10多台机器组成一个网络来跑任务测性能,将来缓存的东西就会比较多,而那些缓存时所分配的内存是不能即时释放的。
  
  偶们实验室一个老师说这种方式当我分配的内存超过4k的时候,就会由于ndis找不准页边界而出错了 :mad:

hu大侠能否赐教?确实是这样么??多谢!!!


你的老师在胡扯。

另外,如果你真的需要缓存――意味着不能立即释放,那么
小心不要让整个系统在网络包峰值速度的时候用光系统的所有
nonpaged memeory,这很容易导致ndis或者tdi,tcp/ip等其他
模块分配不出内存,系统会不稳定。

所以你最好一开始分配一个自己的内存池,不要太夸张的大,
例如4m是可以容忍的,但是40m就夸张了点――你老师说4k就
彻底是胡扯了。然后以后每次分配都不要调用exallocatpool,
也不要调用ndisallocatememory分配了,直接在这个池中作指针
操作就行了。

具体的算法我不描述了,这是一个基本的驱动内存使用技巧。
不再回忆从前,我已经生活在幸福当中。
游客

返回顶部