【发布时间】:2014-06-19 07:48:54
【问题描述】:
我知道内核大量使用likely 和unlikely 宏。宏的文档位于Built-in Function: long __builtin_expect (long exp, long c)。但他们并没有真正讨论细节。
编译器究竟如何处理likely(x) 和__builtin_expect((x),1)?
是由代码生成器还是优化器处理?
是否取决于优化级别?
生成的代码示例是什么?
【问题讨论】:
-
为什么不检查生成的代码?注意:你不会看到任何特别的东西。如果您了解这些“宏”的作用,就应该清楚为什么...
-
这是一个很重要的问题,但基本上编译器生成的机器代码将对它进行一些小的目标特定更改,以使分支预测器和缓存以某种方式运行。老实说,您最好查看英特尔的处理器文档以了解其细节,至少对于 x86 而言。
-
@jww:这不是对话。
-
学习从编译器读取生成的汇编程序以了解正在发生的事情非常有用。尤其是当您对此类纳米优化感兴趣时。
-
是的,Art 说的是认真的。由于这个原因,我对 x86 和 ARM 汇编的学习比我想象的要多得多。
标签: c optimization macros code-generation built-in