我知道在内存分析中已经有一些线程使用了massif和其他工具,但我不知道是否有任何工具或常见技术用于生产环境中的运行时内存分析。C++中的运行时内存分析
可以想象一个实现,其中每个类都提供一个memSize()函数,并通过在其所有成员上调用memSize()并添加它们自己的大小(或大小估计)来扩展容器。然后,在任何时候,您都可以查询应用程序,并使用大部分内存以及随着时间的推移而改变的主要数据结构。
不幸的是,上述策略可能会非常棘手 - 您必须处理诸如锁定,内存对齐等问题,有时您不会知道第三方数据结构有多大,并且您必须猜测。总的来说,它似乎还有相当多的工作要添加到所有类...
因此,来实际的问题 - 什么是监视内存使用情况和导致内存在运行时增长的好方法处理?
这看起来像很多额外的信息(特别是堆栈跟踪),打开它的性能影响是什么? –
这基本上是massif类型方法的运行时版本,对吧?问题在于 - 比方说,如果你知道你有100M的字符串,并且这是你的大部分内存使用情况 - 这是否对你有帮助?假设你有大量的类和集合,其中包含字符串 - 你怎么知道哪一个导致高使用率......这就是为什么我在考虑更多遍历显式结构类型的方法 – naumcho
@Matthieu:在我们的嵌入式系统中获取堆栈跟踪并不昂贵。我们没有得到符号,只是帧的地址,并且使它成为固定成本,我们只提取前6帧左右。然后作为后处理,我们使用符号图将地址转换为符号。 – Miguel