什么是 overflow_usub?

What is overflow_usub?

Linus Torvalds 最近因对拉取请求的咆哮而成为主流新闻。这个拉取请求包括一个函数,overflow_usub,它显然是非标准的并且使用了某种编译器魔法。由于此咆哮的广泛报道,几乎不可能找到有关此功能的任何有用信息。我的问题是:什么是 overflow_usub,什么时候应该使用它,它需要什么样的编译器魔法?

这是一个(可能优化的)溢出检测无符号减法:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0103r0.html#Overflow可以作为编译器内部函数完成,所以可以 被实现为比 Linus 使用的可读代码更高的性能。 可能 是这里的关键词,谁知道呢?优化在许多情况下可能没有那么有用(当然在 Linux 示例中不是),但代码更难读。因此咆哮。

函数overflow_usub定义为:

static inline bool overflow_usub(unsigned int a, unsigned int b, unsigned int *res){
  *res = a - b;
  return *res > a ? true : false;
}

它将检查减法中的整数溢出并且不涉及任何编译器魔法。如果编译器没有 __builtin_usub_overflow.

,这通常是一个回退