可能/不可能的宏可以在用户空间代码中使用吗?
我在 Linux 内核代码中遇到了这两个宏。我知道它们是编译器(gcc)在分支情况下进行优化的指令。我的问题是,我们可以在用户空间代码中使用这些宏吗?它会提供任何优化吗?任何例子都会非常有帮助。
I came across these 2 macros in Linux kernel code. I know they are instructions to compiler (gcc) for optimizations in case of branching. My question is, can we use these macros in user space code? Will it give any optimization? Any example will be very helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,他们可以。 在Linux内核中,它们被定义为
__builtin_expect 宏是使用分支预测的 GCC 特定宏;它们告诉处理器某个条件是否可能为真,以便处理器可以预取分支正确“一侧”的指令。
您应该将定义包装在 ifdef 中,以确保在其他编译器上进行编译:
如果您使用它进行正确的分支预测,它肯定会给您带来优化。
Yes they can. In the Linux kernel, they are defined as
The __builtin_expect macros are GCC specific macros that use the branch prediction; they tell the processor whether a condition is likely to be true, so that the processor can prefetch instructions on the correct "side" of the branch.
You should wrap the defines in an ifdef to ensure compilation on other compilers:
It will definitely give you optimizations if you use it for correct branch predictions.
查看“6.2.2 优化级别 1”下的每个程序员都应该了解的内存知识指令缓存访问” - 有一节专门讨论这个问题。
Take a look into What Every Programmer Should Know About Memory under "6.2.2 Optimizing Level 1 Instruction Cache Access" - there's a section about exactly this.
likely() 和unlikely() 宏是在内核头文件中定义的漂亮名称,它们是真正的gcc 功能
The likely() and unlikely() macros are pretty names defined in the kernel headers for something that is a real gcc feature