web-dev-qa-db-fra.com

Qu'est ce que overflow_usub?

Linus Torvalds a récemment intégré les nouvelles avec une diatribe sur une demande d'attraction. Cette demande d'extraction incluait une fonction, overflow_usub, apparemment non standard et utilisant une sorte de magie de compilation. En raison de la diffusion généralisée de ce discours, il est presque impossible de trouver des informations utiles sur cette fonction. Ma question est la suivante: qu'est-ce que overflow_usub, quand doit-il être utilisé et quel type de magie de compilateur nécessite-t-il?

20
Tamás Szelei

La fonction overflow_usub est définie comme suit:

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

Il vérifiera les dépassements d'entiers en soustraction et n'impliquera aucune magie du compilateur. C'est généralement une solution de secours si le compilateur n'a pas de __builtin_usub_overflow.

18
Constantin

C'est un dépassement (éventuellement optimisé) détectant la soustraction non signée: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0103r0.html#Overflow et peut être fait en tant qu'intrinsèque du compilateur, donc pourrait être implémenté pour être plus performant que le code lisible utilisé par Linus. pourrait être le mot clé ici, comme qui sait? L'optimisation n'est probablement pas si utile dans de nombreux cas (certainement pas dans l'exemple Linux) et pourtant le code est plus illisible. D'où le coup de gueule.

1
Joe