只是好奇,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