阅读:1679回复:7
中间层驱动可以分配多大的memory不泄漏啊??牛人指点一下!版主看过来^_^
passthru改的程序,win2k下,偶要做链表,链表么,就是不能保证在这个线程结束前释放。
那么偶现在要用NdisAllocateMemory分配两类内存: 1。拷贝包用的,比如在ptreceive里面分配一个2k的,拷贝收到的包,然后将自己拷贝的包交给上层,传递之后释放。 2。链表的元素,符合特定条件就增加表项,就分配内存,符合特定条件就释放表项,就free内存。不过都是没准的,不保证线程内一定可以释放干净 那么对于这两类内存的分配范围有什么限制呢,比如要不内存泄漏的话,每一类最大能到多少呢??各位大侠指点啊!!!! :( [编辑 - 5/21/03 by zuozi] |
|
沙发#
发布于:2003-05-20 20:44
没人回答么??斑竹啊,出来帮帮我吧!!!!^_^
|
|
板凳#
发布于:2003-05-21 02:42
没人回答么??斑竹啊,出来帮帮我吧!!!!^_^ 这个问题和核心毫无关系。 建议找一本c语言进阶来看。 你就当是在写app,在用malloc分配内存好了。 |
|
|
地板#
发布于:2003-05-21 02:43
passthru改的程序,win2k下,偶要做链表,链表么,就是不能保证在这个线程结束前释放。 内存泄露和分配的大小毫无关系。 |
|
|
地下室#
发布于:2003-05-21 10:23
呵呵,偶真是幸运,遇到了hu大侠这位传说中的人物^_^
偶现在用的是NdisAllocateMemory, MemoryFlags用的是0,也就是说分配的是nonpaged system-space memory。 其实偶也没有真正碰到内存泄漏,因为偶实际上写了一个路由算法,然后保存了一些路由信息和缓存的任务信息,偶现在只发送了一两个任务测试了一下,发现没有问题,但是欧们实验要求是10多台机器组成一个网络来跑任务测性能,将来缓存的东西就会比较多,而那些缓存时所分配的内存是不能即时释放的。 偶们实验室一个老师说这种方式当我分配的内存超过4k的时候,就会由于ndis找不准页边界而出错了 :mad: hu大侠能否赐教?确实是这样么??多谢!!! |
|
5楼#
发布于:2003-05-22 10:50
没有人理么??自己顶^_^
|
|
6楼#
发布于:2003-05-22 15:04
你申请4k的内存看看再说。
问问你们老师是怎么知道这些规定的。 |
|
|
7楼#
发布于:2003-05-26 04:57
呵呵,偶真是幸运,遇到了hu大侠这位传说中的人物^_^ 你的老师在胡扯。 另外,如果你真的需要缓存――意味着不能立即释放,那么 小心不要让整个系统在网络包峰值速度的时候用光系统的所有 nonpaged memeory,这很容易导致ndis或者tdi,tcp/ip等其他 模块分配不出内存,系统会不稳定。 所以你最好一开始分配一个自己的内存池,不要太夸张的大, 例如4m是可以容忍的,但是40m就夸张了点――你老师说4k就 彻底是胡扯了。然后以后每次分配都不要调用exallocatpool, 也不要调用ndisallocatememory分配了,直接在这个池中作指针 操作就行了。 具体的算法我不描述了,这是一个基本的驱动内存使用技巧。 |
|
|