当前位置: 首页 > 面试题库 >

可以/不太可能在用户空间代码中使用宏吗?

秦凯旋
2023-03-14
问题内容

我在Linux内核代码中遇到了这两个宏。我知道它们是编译器(gcc)进行分支优化的指令。我的问题是,我们可以在用户空间代码中使用这些宏吗?会进行任何优化吗?任何示例都将非常有帮助。


问题答案:

是的他们可以。在Linux内核中,它们被定义为

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

__builtin_expect宏是使用分支预测的特定于GCC的宏;它们告诉处理器条件是否可能为真,以便处理器可以在分支的正确“侧”上预取指令。

您应该将定义包装在ifdef中,以确保在其他编译器上进行编译:

#ifdef __GNUC__
#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
#else
#define likely(x)       (x)
#define unlikely(x)     (x)
#endif

如果将其用于正确的分支预测,它将一定为您提供优化。



 类似资料:
  • 问题内容: 我正在使用2.6.24.3内核为嵌入式Linux项目开发用户空间应用程序。我的应用程序通过创建2个pthread在两个文件节点之间传递数据,每个pthread都hibernate,直到异步IO操作完成,然后唤醒并运行完成处理程序。 完成处理程序需要跟踪待处理的传输数量,并维护几个线程列表,一个线程将添加到该列表中,而另一个线程将删除该列表。 我的问题是… 有没有一种简单的方法可以阻止当

  • 问题内容: 我正在尝试输出文件系统上的可用磁盘空间量。 如果我运行该命令,则可以通过以人为本并实际查看它来获得有关可用磁盘空间(以kb为单位)的良好信息。 我需要获取这些数据,并在我的shell脚本中的其他地方使用它。我最初考虑使用,但后来我的脚本无法移植到其他磁盘上,因为可用磁盘空间会发生变化,剪切将不会产生准确的结果。 如何仅获得示例的可用磁盘空间(以kb为单位)的输出? 问题答案: 要获取以

  • 在Repast Simphony中,可以从运行时环境查看模拟中所有代理的表(每秒)。有没有简单的方法来保存表或运行时环境中的数据?或者我需要编写代码来复制表显示的输出?

  • 问题内容: 我知道Python提供了API,因此您可以在C代码中调用Python解释器,但是我想要的却是相反的。 我的程序需要使用一些C API,所以代码必须用C编写。但是我也想用Python打包程序。这意味着我想在Python中调用这些C函数或可执行文件。那可能吗? 如果我希望C代码成为一个库,这意味着我将它与Python 中的可能的链接一起使用,该怎么做?那可能吗?如果我将C代码写入可执行文件

  • 即使我的帐户可以访问SSMS中的db,并具有sysadmin权限。 检查SQL日志,每当登录失败时,我都可以看到这条消息: 我尝试向和添加,但没有什么不同 但我也试过 以同样的结果

  • 我想检查一堆URL是否正常工作。因此,我编写了一些代码(如下所示)来实现这一点。它适用于像谷歌这样的网站。通用域名格式。当我把它应用到我的场景中时,它失败了。 我正在登录虚拟机。从这个虚拟机,我可以在浏览器中打开所需的URL。当我尝试检查是否可以用代码连接到URL时,它失败了。我的代码从文件中获取的URL是正确的,可以在浏览器上运行。因此,排除了URL中的错误。 我的服务器URL如下所示- 如何调