Разница в скорости между оператором If-Else и тернарным оператором в C…?

Итак, по предложению коллега, я только что проверил разницу в скорости между тернарным оператором и эквивалентным блоком If-Else ... и кажется, что тернарный оператор дает код, который от 1x до 2x быстрее, чем If-Else. Мой код:

  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);

(Извините за использование gettimeofday, а не clock_gettime ... Я постараюсь улучшить себя.)

Я попытался изменить порядок, в котором я рассчитывал блоки, но результаты были им, чтобы упорствовать. Что дает? Кроме того, If-Else показывает гораздо большую вариативность с точки зрения скорости выполнения. Следует ли мне исследовать сборку, которую генерирует gcc?

Между прочим, все это находится на нулевом уровне оптимизации (-O0).

Я это себе представляю, или есть что-то, что я не принимаю во внимание, или это машинно-зависимая вещь, что ли? Любая помощь приветствуется.

11
задан Evan Teran 19 July 2011 в 21:40
поделиться