只是好奇,GCC或Clang工具集目前是否实现了MSVC的identical COMDAT folding(ICF)的等价物?如果不是,有没有计划?除了旧的GCC邮件列表消息外,我似乎无法找到有关此主题的最新权威链接。GCC(/ Clang):使用相同指令合并函数(COMDAT折叠)
如果不是,这是否意味着对于不同类型的模板实例在结果二进制文件中(即它们没有完全内联的情况下)通常是不同的函数,即使它们是二进制兼容的,在其他层面处理这个问题?
另外,是否有人发现ICF在最小化实际生成的可执行文件的大小方面有很大的不同?我没有任何大的MSVC项目可以方便地进行测试。 (我猜这只是真的有帮助,如果你碰巧通过许多不同的vtable-layout兼容类型实例化模板)。
最后,它是C++ 11标准兼容的两个函数指针,以不同的函数比较相等在运行时? This link似乎暗示它不是,但它是为C99。编辑:found previous question on this topic
找到[MSFT的Larry Osterman引用](http://blogs.msdn.com/b/oldnewthing/archive/2005/03/22/400373.aspx):“这个特性[ICF]是什么使得C++模板是应用程序的可行解决方案...否则,模板会导致代码大小的充分膨胀,以至于它们几乎无法用于生产软件。“......好奇GCC/Clang如果不执行此操作,该如何处理 – 2013-03-02 00:09:03
他们确实很顺利,很多软件都使用标准库中的模板,所以显然不是模板“几乎不可用” – 2013-03-02 00:12:34
@JonathanWakely哈,我喜欢GCC,这只是他的引用:) – 2013-03-02 00:16:04