有没有好的内存碎片分析器?(linux的gcc版本会更好)。Valgrind无法分析这一点,因为它使用自定义的malloc/free函数。
谢谢,安德鲁
发布于 2009-09-07 04:58:38
我会从mtrace开始。当您有一个跟踪时,glibc附带了一个perl脚本mtrace(1),它可以查找泄漏。但是,跟踪格式很容易理解,因此应该直接将其处理为碎片分析。
发布于 2009-09-06 22:57:02
我很难理解您可能找到的任何工具如何理解您的自定义内存管理的段数据结构。您也许能够获得繁忙的发行版(挂接到malloc/ free中),但自由发行版(本质上是碎片)似乎悬而未决。
那么为什么不向您的自定义内存管理器添加忙/闲统计/直方图呢?如果存储箱的索引与log2(大小)成正比,则O(1)为了在拆分和合并时保持这些统计信息,您知道大小,并且可以使用与log2(大小)成比例的索引直接查找存储箱
例如直方图的二进制间隔
[2^n,2^(n+1) ) ...
(例如,如果你想要更好的箱子,使用对数平方根2(大小),它可以通过x86位扫描,比较,设置,相加的4个整数指令来计算)
可以使用的另一组合理的存储箱大小是以下开放间隔
[2^n,2^n+2^(n-1) ),[2^n+2^(n-1),2^(n+1) ]...
又一次容易计算的位扫描、移位和加法)
发布于 2009-09-06 23:29:18
nedmalloc是一个非常好的自定义分配器,附带源代码,经过优化以避免碎片。
我会将其插入,并开始查看其内部日志以获取碎片统计信息。
https://stackoverflow.com/questions/1386776
复制相似问题