C++ protocol buffer内存泄露问题
2014-10-07 21:27
190 查看
回顾以前的博客:
c++中使用google protobuf在关闭应用程序之前需要调用google::protobuf::ShutdownProtobufLibrary();要不然会有内存泄露。
其实这样也会同样存在内存泄露的问题。
下面是Google给出的建议原文翻译:
性能提示
在性能上,我们还可以做一些额外的工作,使得 Protocol Buffers 更加高效,其中关键的一个问题就是内存管理。
我们可以尽量的复用 Protocol Buffers message 类,我们对 message 进行了 clear 之后,message 的内存并不会被释放而可以直接重新使用(也就避免了再次分配内存的开销)。message 的内存的使用情况可以通过函数
SpaceUsed 获取。
另外,你也可以尝试使用其他的内存分配器,例如 Google’s
tcmalloc,它对多线程中分配大量小对象有很好的优化。
protocol buffer 推荐循环,重复使用,但是由于每次放入的东西内容大小不一致,导致内存泄露,所以需要动态监测protocol buffer的大小,动态删除。
另外,当嵌套使用protocol buffer时,推荐递归clear。
当大量进行malloc,free操作时会出现内存碎片和加重cpu的负载,关于这一方面的问题,且听下回分解。
这一问题为在百度实习时,对原有程序进行性能调优时遇到。
关于pf更详细的学习,参见:http://name5566.com/2381.html。
c++中使用google protobuf在关闭应用程序之前需要调用google::protobuf::ShutdownProtobufLibrary();要不然会有内存泄露。
其实这样也会同样存在内存泄露的问题。
下面是Google给出的建议原文翻译:
性能提示
在性能上,我们还可以做一些额外的工作,使得 Protocol Buffers 更加高效,其中关键的一个问题就是内存管理。
我们可以尽量的复用 Protocol Buffers message 类,我们对 message 进行了 clear 之后,message 的内存并不会被释放而可以直接重新使用(也就避免了再次分配内存的开销)。message 的内存的使用情况可以通过函数
SpaceUsed 获取。
另外,你也可以尝试使用其他的内存分配器,例如 Google’s
tcmalloc,它对多线程中分配大量小对象有很好的优化。
protocol buffer 推荐循环,重复使用,但是由于每次放入的东西内容大小不一致,导致内存泄露,所以需要动态监测protocol buffer的大小,动态删除。
另外,当嵌套使用protocol buffer时,推荐递归clear。
当大量进行malloc,free操作时会出现内存碎片和加重cpu的负载,关于这一方面的问题,且听下回分解。
这一问题为在百度实习时,对原有程序进行性能调优时遇到。
关于pf更详细的学习,参见:http://name5566.com/2381.html。
相关文章推荐
- C++内存泄露问题解决方案(转)
- C++内存泄露问题
- C++内存泄露问题
- C++虚析构函数的使用(可能造成内存泄露问题)
- C++中vector内存泄露问题
- C++内存泄露的问题
- 一个IQ问题的C++模拟
- C/C++实际编程常见问题分析
- 遭遇C++基础问题 [2004年5月29日 18:33 ]
- 关于C++模板和重载的小问题
- 跨平台C++软件开发中,由于不同操作系统对Unicode的支持差异,而导致的一些问题及解决方案。
- C/C++内存问题检查利器—Purify (四)
- C/C++中align的问题
- 有关C++界面皮肤控件的问题!!
- 波松分酒问题 C++求最优解.
- 关于C++模板和重载的小问题
- C/C++内存问题检查利器—Purify (二)
- C/C++内存问题检查利器—Purify (三)
- C/C++内存问题检查利器—Purify (五)
- C/C++内存问题检查利器—Purify (三)