C编译器是否能够跨目标文件进行优化?

我正在考虑标题与标题和源代码设计之间的关系。 我不确定标头和源是否允许编译器跨目标文件和链接进行优化? 内联优化?

头文件和源文件通常编译为单个翻译单元(因为头文件包含在源文件中)。 所以,这不会是一个问题(除非你有一个特殊的环境,标题是单独编译的)。

GCC确实支持跨不同翻译单元的优化。 请参阅链接时间优化 。

有关详细信息,请参阅-flto选项的文档:

-flto [= N]

此选项运行标准链接时优化程序。 当使用源代码调用时,它会生成GIMPLE(GCC的内部表示之一)并将其写入目标文件中的特殊ELF部分。 当目标文件链接在一起时,所有函数体都从这些ELF部分读取并实例化,就好像它们是同一个翻译单元的一部分一样。 要使用链接时优化程序,应在编译时和最终链接期间指定-flto和优化选项。 建议您使用相同的选项编译参与同一链接的所有文件,并在链接时指定这些选项。