这里的模板粗心大意,内联有些过多-用C++编写肿的代码太容易了。原则上,进行重构以减轻这种膨胀并不​​难。问题在于跟踪最严重的违规模板和内联-跟踪那些在实际程序中导致实际膨胀的项目。

考虑到这一点,并且因为我确信我的库比应该的库更容易膨胀,所以我想知道是否有任何工具可以自动追踪那些最严重的违规者,即找出那些贡献最大的项目(包括所有重复的实例化和调用)到特定目标的大小。

目前,我对性能并不十分感兴趣-它只与可执行文件的大小有关。

是否有用于此工作的任何工具,可在Windows上使用,并与MinGW GCC或Visual Studio匹配?

编辑-一些上下文

我有一组多路树模板,它们代替了红黑树标准容器。它们是作为围绕非类型安全的非模板代码的包装而编写的,但是它们也是在很久以前编写的,并且作为“将更好地缓存友好性提高真实性能”的实验而编写。关键是,它们并不是真正为长期使用而编写的。

因为它们支持一些方便的技巧(基于自定义比较/部分键的搜索,有效的下标访问,搜索最小的未使用键),所以它们最终在我的代码中的几乎任何地方都得到了使用。这些天来,我几乎从未使用过std::map。

在这些之上,我有一些更复杂的容器,例如双向 map 。最重要的是,我有树和有向图类。最重要的是...

使用 map 文件,我可以跟踪非内联模板方法是否引起膨胀。这只是查找特定方法的所有实例并添加大小的问题。但是不明智的内联方法呢?毕竟,模板本来是用于围绕非模板代码的精简包装,但是从历史上看,我判断是否应该内联某些东西的能力不是很可靠。这些模板内联的膨胀影响并不是那么容易衡量。

我知道哪些方法被大量使用,但这是众所周知的优化而没有概要分析的错误。

最佳答案

checkout Symbol Sort。我用了一段时间来弄清楚为什么我们的安装程序在六个月内增长了4倍(事实证明答案是C运行时和libxml2的静态链接)。

关于c++ - 是否有任何工具可以在C++中追踪膨胀?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3141555/

10-13 08:33