【发布时间】:2015-08-04 00:11:00
【问题描述】:
我正在编写纯 c 代码(为了快速性能),我希望 gcc 至少可以扩展我声明为“静态内联”的所有函数(因为我使用的是 std=c99,内联的语义有更改和静态内联是首选),其中一些功能包括矩阵操作,堆向上/向下筛选等。通常发生很多次的相当小的操作。有没有办法通过指定 GCC 的任何选项来实现这一点?我已经启用了-o3,并且在某个地方我遇到过,通过-o3 和“静态内联”函数声明,所有函数调用都将被扩展。真的吗?我该如何验证呢?谢谢!
【问题讨论】:
-
这听起来像是货物崇拜编程。内联函数并不一定意味着程序执行总是更快,考虑到扩展程序的大小会增加缓存未命中或页面错误的风险,并且忽略现代缓存和流水线的影响。我建议你分析你的代码以确保内联是绝对必要的。
-
此外,其他语言(如 C++)并没有太多固有的特性,它们必然总是比“纯 C”慢。如果您真的关心性能,请使用程序集。
-
感谢您的建议,但您没有解决我的问题...如果您有答案,请告诉我。
-
@Dai:有些嵌入式系统仍然没有缓存或 MMU。例如,大多数 ARM Cortex-M(所有 M0/+、M3 和大多数 M4)。实际上,这些是绝大多数 CPU。 (不适用于较小的 8 位和 16 位 CPU)。对于缓存/页面未命中:如果没有内联函数,这可能会成为更大的问题。
-
语义没有改变,因为C90没有
inline函数。