- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在深入研究 Linux 内核的某些部分,发现了这样的调用:
if (unlikely(fd < 0))
{
/* Do something */
}
或
if (likely(!err))
{
/* Do something */
}
我找到了它们的定义:
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
我知道它们是为了优化,但它们是如何工作的?使用它们可以预期降低多少性能/尺寸?至少在瓶颈代码中(当然在用户空间中)是否值得麻烦(并且可能失去可移植性)。
最佳答案
它们提示编译器发出指令,这些指令将导致分支预测有利于跳转指令的“可能”一侧。这可能是一个巨大的胜利,如果预测是正确的,这意味着跳转指令基本上是免费的,并且将占用零个周期。另一方面,如果预测错误,则意味着需要刷新处理器流水线,这可能会花费几个周期。只要预测在大多数情况下都是正确的,这往往有利于性能。
像所有此类性能优化一样,您应该只在广泛分析后执行此操作,以确保代码确实处于瓶颈中,并且可能考虑到微观性质,它正在紧密循环中运行。一般来说,Linux 开发人员都非常有经验,所以我想他们会那样做。他们并不太关心可移植性,因为他们只针对 gcc,而且他们非常了解他们希望它生成的程序集。
关于linux - Linux 内核中的 likely/unlikely 宏是如何工作的,它们有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59695542/
我最近为我的漫画网站实现了自定义喜欢和不喜欢功能。我想让用户能够通过“取消单击”喜欢或不喜欢按钮来“收回”他们的选择。 我的函数的工作原理是: 1) Passing button value (id
我在 Linux 内核代码中遇到了这两个宏。我知道它们是编译器 (gcc) 的指令,用于在分支情况下进行优化。我的问题是,我们可以在用户空间代码中使用这些宏吗?它会提供任何优化吗?任何例子都会很有帮助
FB.Event.subscribe('edge.create', function(response) { alert ('liked!') } ); 如何查看反向 A
我想创建一个像 Facebook 和 Instagram 一样的喜欢/不喜欢功能。 这就是我正在做的事情 Boolean clicked = true; public void onLikeClic
我正在按照 youtube 上的教程为我的状态系统制作一个简单的喜欢/不喜欢按钮,我完成了大部分工作,但它不会更新我的喜欢,也不会将喜欢插入数据库,请帮我说怎么了,我已经尝试了很多了.. 获取状态的函
这个问题已经有答案了: How do the likely/unlikely macros in the Linux kernel work and what is their benefit? (1
我在 Tumblr 上添加了一个 Facebook Like 按钮博客(在模板中):iFrame 代码和 Open Graph标签。该按钮通常显示在每篇博客文章下方。当我单击该按钮时,它会将其状态更改
我如何向学生展示likely 和unlikely 编译器提示 (__builtin_expect) 的可用性? 你能写一个示例代码吗,与没有提示的代码相比,有这些提示的代码会快几倍。 最佳答案 这是我
我想在 codeigniter 中实现类似和不同的功能。我可以使用以下代码在普通的 php 中执行此操作,但我只是不明白为什么它在下面的 codeigniter 中不起作用是我的数据库表以及我的模型
在我的示例中,Google Chrome 36 似乎已损坏并且无法理解 top:50%。 IE 11、Opera 12.17 和 Firefox 31 运行良好。 Chrome 和 Safari 坏了
我了解 likely()/unlikely() 宏的工作原理,也了解分支预测。不幸的是,我没有在高级编程的背景下学习分支预测。 我想知道的是,如果 likely/unlikely 宏中的评估导致段错误
这应该很容易,但我有时间。为什么 ORDER BY with LIKE 会将匹配的结果排序为比不匹配的更高的值?为了获得我期望的结果,我必须在其他方面相同的数据上混合使用 ASC 和 DESC: cr
我一直在深入研究 Linux 内核的某些部分,发现了这样的调用: if (unlikely(fd < 0)) { /* Do something */ } 或 if (likely(!err)
我正在为我的网站实现我自己的喜欢/不喜欢系统。 PHP 部分已经完成并且一切正常,但我正在尝试使 Like/Unlike 过程与 jQuery 的 AJAX 方法完全异步。 我想要实现的是让用户按下赞
目标: 我正在尝试创建一个按钮,允许用户为网站上的帖子点赞(类似于 Facebook 的做法),这也会增加/减少点赞的数量除了按钮之外。 问题:除一种极端情况外,一切正常。如果用户已经喜欢该帖子,他可
我的应用程序目前允许用户喜欢和不喜欢他们 Feed 中的帖子,包括来自其他用户/ friend 的帖子。 当我启用 2013 年 2 月的重大更改时,我的应用程序仍然可以喜欢其他用户的帖子(POST
初步资料:根据近期ISO C++ Committee Trip Report ,条件分支的 [[ likely ]] 和 [[ unlikely ]] 属性将添加到 C++20 中,并且在最新版本的
如果我有: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0
我目前正在编写一个小型地理定位应用程序,与 Google Location History 非常相似. Android 手机定期将其位置发送到服务器,然后我可以在 map 上显示它们。我使用 Java
C++20 已经很方便 [[likely]]/[[unlikely]]指导代码生成的属性。例如,您可以指定一个分支可能被以下人员采用: if (b) [[likely]] { /*...*/ } 同样
我是一名优秀的程序员,十分优秀!