При попытке понять сборку (при включенной оптимизации компилятора) я вижу следующее:
Очень простой цикл, подобный этому
outside_loop;
while (condition) {
statements;
}
Часто компилируется в (псевдокод)
; outside_loop
jmp loop_condition ; unconditional
loop_start:
loop_statements
loop_condition:
condition_check
jmp_if_true loop_start
; outside_loop
Однако, если оптимизация не включена, она компилируется в нормально понятный код:
loop_condition:
condition_check
jmp_if_false loop_end
loop_statements
jmp loop_condition ; unconditional
loop_end:
По моему мнению, скомпилированный код лучше напоминает:
goto condition;
do {
statements;
condition:
}
while (condition_check);
Я не вижу большого повышения производительности или повышения удобочитаемости кода, так почему же так часто бывает? Есть ли имя для этого стиля цикла, например, "проверка состояния трейлинга"?