qt. Q_UNLIKELY
时间: 2023-11-04 15:08:32 浏览: 96
`Q_UNLIKELY` 是 Qt 框架中的一个宏定义,用于指示编译器该代码分支的执行概率非常低,以便于编译器对代码进行优化。
在 C++11 标准中,引入了 `[[unlikely]]` 和 `[[likely]]` 关键字,用于告诉编译器代码分支的执行概率,以便于编译器对代码进行优化。但是在 C++11 标准之前(如 C++03),没有这些关键字。因此,Qt 框架提供了 `Q_UNLIKELY` 和 `Q_LIKELY` 宏定义,用于达到类似的效果。
例如,下面的代码中,`Q_UNLIKELY` 告诉编译器 `if` 分支的执行概率非常低,以便于编译器对代码进行优化:
```cpp
if (Q_UNLIKELY(condition)) {
// do something
}
```
相关问题
CC_UNLIKELY
CC_UNLIKELY是一个宏定义,用于告诉编译器某个条件发生的可能性很低,以便进行优化。它通常用于条件语句中,用于提高代码的执行效率。当条件发生的概率很低时,编译器可以将该条件的代码路径放在分支预测的冷路径上,从而提高程序的性能。
范例:<<引用:有这么多情况引起可见区域变化,但是发生这种情况还是比较少的,相比于不发生变化的情况还是少很多的,所以这里使用CC_UNLIKELY去修饰条件,告诉编译器可以优化 [^1]。引用:这个for循环是对cursorlayer的处理,主题就是调用setIsCursorLayerHint函数设置HWC_IS_CURSOR_LAYER的flags位,函数很简单就不做说明 virtual void setIsCursorLayerHint(bool isCursor) { if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_4)) { if (isCursor) { getLayer()->flags |= HWC_IS_CURSOR_LAYER; } else { getLayer()->flags &= ~HWC_IS_CURSOR_LAYER; } } } 。引用:CC_UNLIKELY是一个宏定义,用于告诉编译器某个条件发生的可能性很低,以便进行优化。它通常用于条件语句中,用于提高代码的执行效率。当条件发生的概率很低时,编译器可以将该条件的代码路径放在分支预测的冷路径上,从而提高程序的性能。[^3]。
CC_UNLIKELY的使用示例[^3]:
```c++
if (CC_UNLIKELY(condition)) {
// 当条件发生的概率很低时执行的代码
}
```
能具体解释下UNIV_UNLIKELY这个宏定义吗
`UNIV_UNLIKELY` 是一个宏定义,它通常被用于告诉编译器某个条件不太可能成立,以便于编译器对代码进行一些优化。具体来说,这个宏定义会将条件表达式放在一个带有 `__builtin_expect` 内置函数的语句中,`__builtin_expect` 函数告诉编译器这个条件表达式的期望值是什么,从而帮助编译器进行一些分支预测的优化。
例如,在下面的代码中:
```c++
if (UNIV_UNLIKELY(!ptr)) {
// do something
}
```
`UNIV_UNLIKELY` 会将 `!ptr` 放在一个带有 `__builtin_expect` 函数的语句中,告诉编译器 `!ptr` 的期望值是 `true`,也就是指针为空的情况比较少见。这样,编译器就可以根据这个期望值进行分支预测的优化,使得代码的执行效率更高。
在实际使用中,`UNIV_UNLIKELY` 的定义如下:
```c++
#define UNIV_UNLIKELY(x) (__builtin_expect(!!(x), 0))
```
其中,`!!(x)` 会将 `x` 转换为一个布尔值,`__builtin_expect` 函数的第二个参数表示期望值,如果期望值为 0,则表示条件不太可能成立,否则表示条件比较常见。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)