返回信息流最近在做一个基于PowerPC的一个项目,昨天发现了一个奇怪的问题。当我将BSP+Application的image下载到目标板之后,用memShow命令观察系统内存的使用状况,发现memShow给出的alloc字节数会随时间增长,而且是阶跃型增长。
起初我以为是我的application出现了内存泄漏,于是将application隔离出来,仅仅下载BSP,再次使用memShow,发现alloc字节数还是在涨。我走读了一下我的BSP的代码,实在没有发现哪里有malloc但没有free的内存,于是再度陷入困境。
难道是memShow中的alloc域,不会统计已经free的内存吗?于是我自己写了一个验证程序,用一个函数malloc一块内存,再用另一个函数free掉这块内存,发现Alloc字节数也是先增长然后回退到原来水平的,说明memShow中的alloc已经考虑了free的影响。
难道是我的BSP真的有内存泄漏吗?因为没有往里面加多少东西,感觉出问题的概率不大吧……
请版上的虫子们一起来讨论一下这个问题吧!Bow!
对了,我的VxWorks是6.5的版本……
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #4715同步于 2009/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[讨论]关于VxWorks的内存管理
gonewind83
2009/5/6镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
通过work bench里面的memscope,发现tNetTask会不定期的malloc一块内存。
为什么tNetTask会申请内存?通过与风河工程师的交流,得知原来tNetTask会定期找块内存用来存储ipfirewall过滤包时的log,可以通过调用ipfirewall_flush_log()来free之前申请的这些内存,这样就不会有内存泄漏了。
当然,直接把ipfirewall disable掉,就可以禁止tNetTask的log功能,但是代价未免就太大了,看能否通过设置rules来定期清理了。
此次经验愿与后人共勉!
【 在 gonewind83 的大作中提到: 】
: 通过work bench里面的memscope,发现tNetTask会不定期的malloc一块内存。
: 为什么tNetTask会申请内存?通过与风河工程师的交流,得知原来tNetTask会定期找块内存用来存储ipfirewall过滤包时的log,可以通过调用ipfirewall_flush_log()来free之前申请的这些内存,这样就不会有内存泄漏了。
: 当然,直接把ipfirewall disable掉,就可以禁止tNetTask的log功能,但是代价未免就太大了,看能否通过设置rules来定期清理了。
: ...................
自己努力最终解决问题,还与大家分享
LZ RP++;