内联 C 代码:-flto 或不-flto

inlining C code : -flto or not -flto

我最近的一个程序高度依赖于内联一些 "hot" 函数来提高性能。这些热门函数是外部 .c 文件的一部分,我不想更改它。

不幸的是,虽然 Visual 非常擅长此练习,但 gcc 和 clang 却不是。显然,由于热点函数在不同的 .c 内,因此无法将它们内联。

这给我留下了 2 个选择:

2 个问题:

  1. 有没有办法在 gcc 上使用 -flto 时关闭这些警告消息?
  2. 考虑到优缺点,上述两种方法中哪一种似乎更好?
  3. 可选:还有其他解决方案吗?

根据您的评论,您必须支持 gcc 4.4。由于 LTO 从 gcc 4.5 开始(请谨慎对待早期版本),答案应该很清楚。 没有-flto.

因此,#include 代码当然要格外小心。

更新:

file-extension 不应该是 .c,但是,例如.inc.i 也是个坏主意)。更好的是:.h 并将函数更改为 static inline。这仍然可能不能保证内联,但这与所有函数相同,并且它保持干净的外观 header(尽管更长的 inline 函数仍然是不好的风格)。

在做这一切之前,如果代码 真的 有问题,我会适当地分析一下。首先应该专注于编写可读和可维护的代码。