【发布时间】:2021-04-29 13:08:35
【问题描述】:
我用g++ 编译我的代码已经有一段时间了,然后转移到英特尔的icpc 编译器。使用icpc,我不断收到以下警告:
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
g++ 从来没有遇到过这个问题。经过一番研究,我了解到我可以使用-no-inline-max-total-size 和-no-inline-total-size 进行编译,以避免限制内联大小。我的问题是,尽可能多地删除内联和内联的大小是否总是一个好习惯?我的代码计算量很大,性能是关键,因此我的常识表明我应该允许编译器尽可能多的内联。真的吗?是否存在施加内联限制有用的情况?
【问题讨论】:
-
内联并不总是净收益,它会对性能产生负面影响。见this article。您不应该告诉编译器要内联什么。相信它比你更擅长决定内联的内容。除非您已经通过工具和测量证明强制内联是有益的,否则您不应该这样做。编译器可以通过as-if rule 内联它想要的任何内容。
-
谢谢!那么这是否意味着 g++ 编译器也有一些内联限制,只是没有发出任何警告?
-
@Botond:是的,完全正确。您可以使用
-finline-limitoption 在 g++ 中调整此限制。如果您想在声明为inline的函数未内联时收到通知,还有-Winline选项。 -
我不太了解具体的编译器实现细节。有可能的。也许如果您共享了@987654324@,则可以比较编译器输出的程序集。