Предполагая язык является C (вы не указали), то вы можете убедиться, что ваши два сниппеты генерировать точно тот же код, сравнивая выходной сборки НКУ:
#!/bin/bash
diff <(gcc -O0 -S -o - -x c - <<EOF
extern int condition1();
extern int condition2();
extern int condition3();
extern int condition4();
extern void do_something1();
extern void do_something2();
extern void do_something3();
extern void do_something4();
void main() {
if(condition1())
{
do_something1();
}
else
{ if(condition2())
{
do_something2();
}
else
{ if(condition3())
{
do_something3();
}
else
{ if(condition4())
{
do_something4();
}
}
}
}
}
EOF
) <(
gcc -O0 -S -o - -x c - <<EOF
extern int condition1();
extern int condition2();
extern int condition3();
extern int condition4();
extern void do_something1();
extern void do_something2();
extern void do_something3();
extern void do_something4();
void main() {
if(condition1())
{
do_something1();
}
else if(condition2())
{
do_something2();
}
else if(condition3())
{
do_something3();
}
else if(condition4())
{
do_something4();
}
}
EOF
)
Это создает NO вывода (вы можете доказать, что тест действителен (например), удалив последнее условие из одной из функций и наблюдая, что теперь он показывает разницу).
Поскольку выход для ассемблера идентичен для двух блоков, вы можете определить, что характеристики производительности должны быть одинаковыми.
Поставьте регистраторов и проверьте .. –
Почему, по вашему мнению, добавление брекетов может иметь значение? –
Я считаю это преждевременной оптимизацией, которую вы не должны делать, если у вас действительно нет проблемы с производительностью (https://en.wikipedia.org/wiki/Program_optimization). Кроме того, вы можете подумать, что, скорее всего, компилятор преобразует его в один из параметров (компилятор также оптимизирует). У вас будет десятка других мест, где вы сможете выиграть больше производительности, чем вы можете сделать здесь. Если вы работаете в некоторой виртуальной машине, ваша виртуальная машина даже может выполнять оптимизацию во время выполнения, в зависимости от ваших фактических потоков данных. – philnate