Легко предсказать и трудно предсказать.Простые выражения, такие как:
int a = b + (2 * c):
int d = e + (2 * c);
, оптимизируются с помощью простейших оптимизаций ("общее подвыражение" (2 * c)
будет вычислено только один раз.
В C / C ++ методы, объявленные как встроенные, как правило, встроенныебудет (хотя и не всегда).
Более хитрыми являются циклические оптимизации и т. п. Например,
for (int i = 1; i < n; i++) {
a = i + (2 * c);
}
выражение (2 * c)
обычно вытаскивается из цикла в компиляторекоторый выполняет «глобальную оптимизацию», но не в той, которая выполняет только «локальную оптимизацию». И, конечно, выражения могут стать намного более сложными и запутанными.
Измените тело вышеприведенного цикла на a = i * (2 * c);
и вы переходите к немного более высокому уровню глобальной оптимизации, известному как «индукция цикла». «Умный» компилятор найдет способ просто добавить 2 * c
(как предварительно вычислено) к a
для каждой итерации цикла, по сравнению с выполнением(более дорогое) умножение на каждую итерацию.
И это только поверхностное представление.
Но я понятия не имею, что компиляторы Visual Studioспособны на