内存碎片分析器

And*_*rew 20 c c++ memory-management heap-fragmentation

有没有好的内存碎片分析器?(linux gcc版本会很好).Valgrind无法对此进行分析,因为它使用自定义malloc/free函数.

谢谢,安德鲁

Mar*_*wis 5

我会从mtrace开始.当你有一个跟踪时,glibc附带一个perl脚本mtrace(1),它会发现泄漏.但是,跟踪格式很容易理解,因此应该将其直接处理为碎片分析.


pga*_*ast 1

我很难理解您可能找到的任何工具如何理解自定义内存管理的段数据结构。您也许能够获得繁忙的发行版(挂钩到 malloc/free),但免费发行版(本质上是碎片)似乎悬而未决。

那么为什么不将繁忙/空闲统计信息/直方图添加到您的自定义内存管理器中呢?如果 bin 按与 log2(size) 成比例的内容进行索引,则保留这些统计信息的时间复杂度为 O(1),因为当您拆分和合并时,您知道大小,并且可以使用与 log2(size) 成比例的索引通过直接查找来找到 bin

例如直方图箱间隔

[2^n,2^(n+1) ) ...

(例如,如果您想要更精细的 bin,请使用对数基数平方根 2(大小),可以使用 x86 上的 4 个整数指令来计算 [位扫描、比较、设置、添加])

另一组可使用的合理 bin 大小是以下开区间

[2^n, 2^n+2^(n-1) ),[2^n+2^(n-1),2^(n+1) )...

再次可以轻松计算[位扫描、移位和相加])

  • “自定义”指的是 valgrind - valgrind 测量 malloc 碎片是愚蠢的,因为 valgrind 取代了默认分配器(您想要测量真正的分配器,而不是挂钩的 valgrind) (4认同)