这里的模板粗心大意,内联有些过多-用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/