Я только что сравнил неоптимизированный ассемблерный вывод gcc:
# cat while.c
int main() {
while(1) {};
return 0;
}
# cat forloop.c
int main() {
for (;;) { };
return 0;
}
Сделать вывод ассемблера:
# gcc -S while.c
# gcc -S forloop.c
Сравнить файлы ассемблера:
# diff forloop.s while.s
1c1
< .file "forloop.c"
---
> .file "while.c"
Как видите, нет существенных различий. Вот вывод
# cat while.s
.file "while.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
.L2:
jmp .L2 # this is the loop in both cases
.size main, .-main
.ident "GCC: (GNU) 4.4.3"
.section .note.GNU-stack,"",@progbits
Хотя это не является техническим доказательством того, что они одинаковы, я бы сказал, что в 99,9% случаев.