所以我想知道为什么在检查kmalloc的返回值时,我们不会使用"可能"提示如下:
void *ptr = kmalloc(size, GFP_KERNEL)
if (unlikely(!ptr))
return err;
我的假设当然是kmalloc不会经常失败。我很难记住它最后一次失败。基于此,它对编译器不是一个有用的推荐吗?
答案 0 :(得分:1)
执行此操作可能不会有什么坏处,但除非您在紧密循环中运行malloc,否则与malloc本身的成本相比,它可能对运行时的影响可以忽略不计。
答案 1 :(得分:1)
首先注意到kmalloc只是一个宏,可以根据args扩展到不同的函数调用。它展开的func用__attribute__((__malloc__))
注释,这允许编译器假设类似malloc的行为。我不知道这种做法能够带来什么样的优化,但是很可能会充分利用这种功能不会失败的预期。