c++ - 英特尔编译器内联大小

标签 c++ gcc inline icc

我已经使用 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 进行编译,以避免内联大小的限制。我的问题是,尽可能删除内联和内联上的尺寸是否总是一个好的做法?我的代码计算量很大,性能是关键,因此我的常识表明我应该允许编译器尽可能多的内联。真的吗?在某些情况下施加内联限制是有用的吗?

最佳答案

My question is whether it is always a good practice to remove sizes on inlining and inline as much as possible?

不,消除内联的大小限制或尽可能多地内联并不总是一个好的做法。

理想情况下,只有在提高性能时才应进行内联。

Are there situations at all where imposing an inlining limit is useful?

如果一个函数非常大,并且从许多上下文中调用它,那么将此类函数内联到所有这些上下文将使可执行文件膨胀。如果可执行文件本身由于内联而有几千兆字节,那么从磁盘加载程序可能会成为瓶颈。

在病理性较小的情况下,权衡更为微妙。找出最佳极限的方法是测量。配置文件引导优化可以为优化器提供比简单硬限制更有用的启发式方法。

关于c++ - 英特尔编译器内联大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65889668/

相关文章:

c - 如何从 Newlib 在 GCC 中实现 printf?

assembly - 如果我在程序中使用 fsin 来查找值的 sin,我会发现表达式语法错误

c++ - 为什么这个微不足道的程序在编译时会这么大?

c++ - Phong-Alpha Material 透明度

C++ Builder 2009 Float 与 Long Double

performance - 调用递归内部函数时如何避免创建 FSharpFunc 的新实例?

c++ - 来自随机数生成器包装器 (C++) 的令人困惑的内联行为

c++ - BFS 的伪代码(来自算法设计,第 2 版)混淆?

c - 未定义对 `SHA1' 的引用

linux - 如何将多个输入从文件重定向到正在 gdb 中调试的二进制文件?