当试图理解汇编(启用编译器优化)时,我看到了这种行为:
像这样的非常基本的循环
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);
我看不到巨大的性能提升或代码可读性提升,为什么经常出现这种情况?是否有此循环样式的名称,例如“尾随条件检查”?