В общем, я в некотором замешательстве :) Есть чужой код с функцией, которая вызывается много раз и возвращает некоторое значение, причем выдача зависит от некоторого значения, не меняющегося во время работы, т.е. что-то типа :
if (task==1) {
...
}//1
if (task==2) {
...
}//2
if (task==3) {
...
}//3
...
Переделываю это в такой вид (криво, но тем не менее) :
#if task==1
...
#if task==2
...
#if task==3
...
...
По логике препроцессор вырезает всё лишнее и отдает нужное компилятору, т.е. регрессий быть не может, скорее наоборот (про предсказатель условных переходов в ЦПУ прекрасно знаю). НО - наблюдаю следующее странное поведение: старая версия немного, но БЫСТРЕЕ. Под немного имеется в виду следующее :
old time ~ 0m2.104s
new time ~ 0m2.130s
разница незначительна и не принципиальна, но это поведение стабильно, т.е. при увеличении числа итераций всё остается в том же духе. Кто знает, в чем причина такого странного, на мой взгляд, поведения ?