Итак, по предложению коллега, я только что проверил разницу в скорости между тернарным оператором и эквивалентным блоком 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).
Я это себе представляю, или есть что-то, что я не принимаю во внимание, или это машинно-зависимая вещь, что ли? Любая помощь приветствуется.