将所有源文件一次传递给编译器有什么好处吗?

onq*_*tam 4 compiler-construction gcc clang icc visual-c++

我读过"整个程序优化"(wpo)和"链接时间代码生成"(ltcg).

我想知道如果我一次性将所有源代码从cli传递给编译器(例如"g ++ a.cpp b.cpp"),是否会有更多的模块间分析?或者只是要启用其中一个标志?

编译器之间有区别吗?例如,英特尔编译器可以从这种做法中受益,而其他编译器却没有吗?

Jon*_*ely 5

我想知道如果我一次性将所有源代码从cli传递给编译器(例如"g ++ a.cpp b.cpp"),是否会有更多的模块间分析?

对于GCC,不,这样做不会启用任何WPO,每个翻译单元都是单独处理的.我99%肯定Clang也是如此,90%肯定对大多数其他编译器都是如此.

使用GCC,要启用模块间优化,您需要通过-flto交换机显式请求它,交换机仍然隔离处理每个转换单元,但是附加信息被写入目标文件,然后当它们链接在一起时,进一步优化传递到产生最终输出.