Diferença de velocidade entre o operador If-Else e Ternary em C…?

Por sugestão de um colega, acabei de testar a diferença de velocidade entre o operador ternário e o bloco If-Else equivalente ... e parece que o operador ternário gera código que está entre 1x e 2x mais rápido que o If-Else. Meu código é:

  gettimeofday(&tv3, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     if(a) a = b; else a = c;
  }
  gettimeofday(&tv4, 0);


  gettimeofday(&tv1, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     a = a ? b : c;
  }
  gettimeofday(&tv2, 0);

(Desculpe por usar gettimeofday e não clock_gettime ... vou me esforçar para melhorar.)

Tentei alterar a ordem em que cronometrei os blocos, mas os resultados parecem persistir. O que da? Além disso, o If-Else mostra muito mais variabilidade em termos de velocidade de execução. Devo examinar o assembly que o gcc gera?

Aliás, tudo isso está no nível de otimização zero (-O0

Estou imaginando isso, ou há algo que não estou levando em consideração, ou isso depende de uma máquina ou o quê? Qualquer ajuda é apreciad

questionAnswers(6)

yourAnswerToTheQuestion