Это ситуация, с которой я часто встречаюсь как неопытный программист, и мне интересно, в частности, за амбициозный, быстрый проект, который я пытаюсь оптимизировать. Для основных C-подобных языков (C, objC, С++, Java, С# и т.д.) И их обычных компиляторов эти две функции будут работать так же эффективно? Есть ли разница в скомпилированном коде?
void foo1(bool flag)
{
if (flag)
{
//Do stuff
return;
}
//Do different stuff
}
void foo2(bool flag)
{
if (flag)
{
//Do stuff
}
else
{
//Do different stuff
}
}
В принципе, существует ли когда-либо непосредственный бонус/штраф за эффективность при начале break
ing или return
? Как задействован стек? Существуют ли оптимизированные особые случаи? Существуют ли какие-либо факторы (например, вложение или размер "Делать материал" ), которые могут существенно повлиять на это?
Я всегда сторонник улучшения удобочитаемости в отношении небольших оптимизаций (я вижу, что foo1 много с проверкой параметров), но это происходит так часто, что я хотел бы отложить все беспокойство раз и навсегда.
И я знаю о подводных камнях преждевременной оптимизации... тьфу, это некоторые болезненные воспоминания.
EDIT: я принял ответ, но ответ EJP объясняет довольно кратко, почему использование return
практически ничтожно (в сборке return
создает "ветвь" до конца функции, что чрезвычайно быстро. Разветвление изменяет регистр ПК и может также влиять на кеш и конвейер, что довольно незначительно.) В этом случае, в частности, это буквально не имеет значения, поскольку и теги if/else
, и return
создают одну ветвь конец функции.