gpt4 book ai didi

c - Linux 内核中的 likely()/unlikely() 宏存在段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:00 25 4
gpt4 key购买 nike

我了解 likely()/unlikely() 宏的工作原理,也了解分支预测。不幸的是,我没有在高级编程的背景下学习分支预测。

我想知道的是,如果 likely/unlikely 宏中的评估导致段错误,这将如何影响分支预测历史甚至当前结果/管道。

我不明白如果预测的验证没有完成,我们怎么知道它是成功还是失败?

最佳答案

__builtin_expect (在 the definition of the likely/unlikely macros 中使用)不会生成实际代码来评估其任一参数。它所做的只是告诉编译器如果对它求值会得到什么结果。

如果您告诉优化器 *(int*)NULL 通常是 13,它可能会使优化器感到困惑,但是(除非有编译器错误)它不会对编译器造成段错误,或生成在运行时出现段错误的代码。

Another answer on the old question具有带/不带宏的实际 asm,表明它们的效果在于 gcc 如何布局代码(例如,将不太可能的情况自行关闭,以及条件分支的失败未采用侧的可能情况,其中指令-缓存未命中的可能性较小)。


这不完全是 likely()/unlikely() macros in the Linux kernel - how do they work? What's their benefit? 的重复,但您会找到更多关于这些宏如何工作以及它们对问答有何影响的信息。

关于c - Linux 内核中的 likely()/unlikely() 宏存在段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38358401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com