C++: Может ли компилятор оптимизировать этот сегмент кода?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++: Может ли компилятор оптимизировать этот сегмент кода?

Сообщение Anonymous »

Код: Выделить всё

void foo(const int constant)
{
for(int i = 0; i < 1000000; i++) {
// do stuff
if(constant < 10) {              // Condition is tested million times :(
// inner loop stuff
}
}
}
При каждом выполнении внешнего цикла проверяется значение константы. Однако константа никогда не меняется, поэтому много процессорного времени тратится на проверку константы условия < 10? снова и снова. После первых нескольких проходов человек поймет, что константа никогда не меняется, и будет разумно избегать проверки ее снова и снова. Компилятор замечает это и разумно оптимизирует это, или повторение цикла if неизбежно?

Лично я считаю, что проблема неизбежна. Даже если компилятор поместит сравнение перед внешним циклом и установит какую-то логическую переменную «skip_inner_stuff», эту переменную все равно придется проверять при каждом проходе внешнего цикла for.

Что вы думаете по этому поводу? Есть ли более эффективный способ написать приведенный выше сегмент кода, который позволил бы избежать этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/186 ... de-segment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»