我正在开展一个大型项目,现在我们遇到了一些内存问题。向量已用于所有阵列,快速搜索似乎有大约2000个成员向量。
通过代码似乎没有人曾经使用过保留或交换(在这个项目中还没有使用C ++ 11)。
我是否可以使用任何工具或技术来确定这些载体中有多少内存丢失?
答案 0 :(得分:2)
使用valgrind来调试内存问题。
http://valgrind.org/docs/manual/ms-manual.html
答案 1 :(得分:1)
看到容量对内存的影响的一个快速但又脏的技巧是修改 std :: vector(或者将typedef std :: vector转换为自定义矢量类型)。
想法是修改向量以确保此自定义新向量完全按需要增加容量而不是加倍(是的,它将超级慢),并查看当您运行它时应用程序的内存使用情况如何变化这个自定义矢量。
虽然在实际优化代码方面没有用,但它至少可以让您快速了解通过优化矢量可以获得多少收益。
答案 2 :(得分:0)
只需添加一些定期记录行,即打印矢量大小,容量和
sizeof(v) + sizeof(element_type) * v.capacity();
对于每个向量v(最后一个将是内存中向量的确切大小)。你可以将所有向量注册到中央位置以保持整洁。
然后,您可以通过搜索日志文件进行一些分析 - 查看哪些内存正在使用大量内存以及使用情况如何随时间变化。如果只是高峰值使用率,那么您可以调整大小'你的载体摆脱了备用容量。