Подтвердить что ты не робот

Что такое overflow_usub?

Линус Торвальдс недавно сделал это, чтобы распространять новости с напыщенной просьбой о вытягивании. Этот запрос на тягу включал функцию overflow_usub, которая, по-видимому, нестандартна и использует магию компилятора. В результате широко распространенного сообщения об этом заявлении почти невозможно найти полезную информацию об этой функции. Мой вопрос: что такое overflow_usub, когда он должен использоваться и какой магией компилятора требуется?

4b9b3361

Ответ 1

Функция 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.

Ответ 2

Это (возможно, оптимизированное) переполнение, обнаруживающее неподписанное вычитание: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0103r0.html#Overflow и может быть выполнено как внутренняя среда компилятора, поэтому может быть реализована как более высокая производительность, чем читаемый код Linus. может быть оперативным словом здесь, как известно? Оптимизация, вероятно, не так полезна во многих случаях (конечно, не в примере Linux), но код более нечитабельный. Следовательно, напыщенная речь.