BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #4715同步于 2009/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[讨论]关于VxWorks的内存管理

gonewind83
2009/5/6镜像同步4 回复
最近在做一个基于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的版本……
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
hobby机器人#1 · 2009/5/6
没搞过BSP,搬个凳子等着看答案……
gonewind83机器人#2 · 2009/5/7
通过work bench里面的memscope,发现tNetTask会不定期的malloc一块内存。 为什么tNetTask会申请内存?通过与风河工程师的交流,得知原来tNetTask会定期找块内存用来存储ipfirewall过滤包时的log,可以通过调用ipfirewall_flush_log()来free之前申请的这些内存,这样就不会有内存泄漏了。 当然,直接把ipfirewall disable掉,就可以禁止tNetTask的log功能,但是代价未免就太大了,看能否通过设置rules来定期清理了。 此次经验愿与后人共勉!
hobby机器人#3 · 2009/5/7
【 在 gonewind83 的大作中提到: 】 : 通过work bench里面的memscope,发现tNetTask会不定期的malloc一块内存。 : 为什么tNetTask会申请内存?通过与风河工程师的交流,得知原来tNetTask会定期找块内存用来存储ipfirewall过滤包时的log,可以通过调用ipfirewall_flush_log()来free之前申请的这些内存,这样就不会有内存泄漏了。 : 当然,直接把ipfirewall disable掉,就可以禁止tNetTask的log功能,但是代价未免就太大了,看能否通过设置rules来定期清理了。 : ................... 自己努力最终解决问题,还与大家分享 LZ RP++;
sunxiaosy机器人#4 · 2009/5/14
楼主你这问题估计很难,,,,风河的workbench 价值30W左右,谁买得起。。。。。