Что я могу разумно ожидать, что компилятор сможет встроить? - PullRequest
1 голос
/ 19 декабря 2011

Существуют ли общие правила, которые я могу использовать для оценки того, будет ли современный компилятор встроен в функцию?Какова относительная стоимость дополнительного стекового фрейма (я знаю, что он очень маленький, но есть ли способ вообще его количественно оценить - в пределах порядка или около того)?

Меня также особенно интересует:

  • Могут ли встроенные методы компилятора, определенные в cpp?
  • Я знаю, что некоторые компиляторы реализуют некоторые оптимизации даже в отладке (VS использует RVO в отладке, но не NRVO) - Какова ситуация длявстраивание?Я бы предположил, что он отключен, чтобы мы могли видеть ожидаемый стек вызовов для отладки.

В настоящее время я пытаюсь микрооптимизировать систему отслеживания памяти, особенно те, которые также применяются без включенной оптимизации (в отладке).

1 Ответ

2 голосов
/ 19 декабря 2011

Легко предсказать и трудно предсказать.Простые выражения, такие как:

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способны на

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...