Outils pour utilisateurs

Outils du site


lang:cpp:attribut

Ceci est une ancienne révision du document !


Les attributs ci-dessous sont standards et supportés par l'ensemble des compilateurs.

[[unlikely]] et [[likely]]

Il est possible d'indiquer au compilateur si une condition est généralement vraie ou fausse. Cela fonctionne sur if et case.

int i = 1;
if (i == 1) [[likely]]
  ...
int f(int i)
{
  switch(i)
  {
    case 1: return 1;
    [[likely]]
    case 2: return 2;
    [[unlikely]]
    default: return 3;
  }
  return 2;
}
  • Code généré sans les attributs [[likely]] et [[unlikely]].

gcc est utilisé et les options d'optimisation doivent être activées au minimum niveau 1.

f(int):
  mov     eax, edi
  cmp     edi, 1
  je      .L2
  cmp     edi, 2
  mov     edx, 3
  cmovne  eax, edx
.L2:
  ret
  • Code généré avec les attributs [[likely]] et [[unlikely]]
f(int):
  mov     eax, edi
  cmp     edi, 1
  je      .L2
  cmp     edi, 2
  jne     .L8
.L2:
  ret
.L8:
  mov     eax, 3
  ret
lang/cpp/attribut.1592301649.txt.gz · Dernière modification : 2020/06/16 12:00 de root