Код: Выделить всё
for( int i = 0; i < n; ++i)
{
if( data[i] > c && data[i] < r )
{
--data[i];
}
}
Когда data было временно хранится так:
Код: Выделить всё
for( int i = 0; i < n; ++i)
{
const int tmp = data[i];
if( tmp > c && tmp < r )
{
--data[i];
}
}
Но что еще более важно, когда я переместил сегмент кода в отдельную функцию, он стал примерно в четыре раза медленнее. Я хотел понять, что происходит, поэтому посмотрел opt-отчет, и в обоих случаях цикл векторизован и, похоже, выполняет одну и ту же оптимизацию.
Итак, мои Вопрос в том, что может иметь такое значение для функции, которая не вызывается миллион раз, но сама по себе отнимает много времени? Что искать в opt-отчете?
Я мог бы избежать этого, просто оставив его встроенным, но меня беспокоит вопрос «почему».
ОБНОВЛЕНИЕ:
Я должен подчеркнуть, что моя главная задача - понять, почему он стал медленнее при перемещении в отдельную функцию. Пример кода с переменной tmp был просто странным примером, с которым я столкнулся в процессе.
Подробнее здесь: https://stackoverflow.com/questions/489 ... -performed
Мобильная версия