通常称为likely
和的unlikely
宏可帮助编译器了解if
通常是要输入还是要跳过的。使用它可以带来一些(而不是很小的)性能改进。
我最近开始使用它们,我不确定应该多久使用一次此类提示。我目前将其与错误检查if
s 配合使用,通常将其标记为unlikely
。例如:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
看起来还可以,但是错误检查if
经常发生,因此使用了所述宏。
我的问题是,是不是太有likely
和unlikely
宏的每个错误的检查if
?
当我们在这里时,他们经常在其他什么地方使用?
在我当前的用法中,它位于从实时子系统进行抽象的库中,因此程序可以在RTAI,QNX和其他程序之间移植。也就是说,大多数功能都很小,可以直接调用一个或两个其他功能。许多甚至是static inline
功能。
因此,首先,它不是我可以描述的应用程序。“识别瓶颈”是没有意义的,因为它是一个库,而不是一个独立的应用程序。
其次,有点像“我知道这不太可能,我不妨告诉编译器”。我没有积极尝试优化if
。
likely
和unlikely
存在以及它们的作用。我没有发现任何真正建议何时何地使用它们的建议。