关于omnet++ 消息使用的一点儿猜想和建议

问题描述:这几天,项目中遇到这么一个问题,程序运行着,大概基站与节点之间交互信息达到2万多次,具体多少次我没有记住,就出现了std::bad_alloc这个问题。

如图:



然后我又换了一台32G的电脑,但是内存占用在15%的时候,同样出现了这问题。后面百度了一下,也没发现什么问题。


想了想,在基站与节点交互过程中,需要计算的值都会通过全局变量来计算的。在这个过程中,除了在函数里面产生一些消息之外,初次之外,再也没有产生其他变量了。

按我的理解,在函数里面产生的指针,应该在函数结束后会销毁的,应该不存在内存不够分的情况。  后面跟别人讨论了,然后百度到一个说什么for循环里面产生变量,可能会导致这个问题,但是对比了我的代码,我没有在for循环里面new一个消息,只是把这个消息作为参数,传给另外的函数,在该函数里面对这个消息的复本进行了发送。


后面我先把程序用完消息后,就delete了,但是还是出了这个问题。

后面我不再new消息了,而是把每次需要发送的消息(这里,我每次都是发送相同类型的消息),作为一个私有成员,每次用他的副本进行发送,在case函数里面判断后,使用完了就delete了。在发送消息达到 10万多次以上都没有出现这个问题,4G内存电脑上,内存占用最高不超过75%(程序跑了有20多分钟)



建议:在程序中多次(1万次以上)需要使用同一种类型的消息时候,建议把它作为类的成员,最好不要每次在函数里面new一个消息,然后还有就是消息用完了,记得删除。我这里出现这个原因,也可能是自己没有删除(程序里面可能只对部分消息删了,另一部分没有,后面出现这个问题后,我都补全了删除消息,记得不是很清楚了)


经过验证,把参数很多,程序在发送那个消息达到


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值