Сообщение от
haywire
Но в аду им не позволит гореть современный компилятор. Он выправит этот код. Можете проверить.
Код:
#include <stdio.h>
int func (a)
char a;.
{
int b[60000];
int i;
for (i =a; i != 60000; ++i)
printf("%i: %c\n", i, b[i]);
}
int main()
{
a('a');
}
Код:
gcc -O2 -c test.c
objdump -d -M intel test.o
Код:
Дизассемблирование раздела .text:
0000000000000000 <func>:
0: 53 push rbx
1: 40 0f be df movsx ebx,dil
5: 48 81 ec 80 a9 03 00 sub rsp,0x3a980
c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
10: 48 63 c3 movsxd rax,ebx
13: 89 de mov esi,ebx
15: bf 00 00 00 00 mov edi,0x0
1a: 8b 14 84 mov edx,DWORD PTR [rsp+rax*4]
1d: 83 c3 01 add ebx,0x1
20: 31 c0 xor eax,eax
22: e8 00 00 00 00 call 27 <func+0x27>
27: 81 fb 60 ea 00 00 cmp ebx,0xea60
2d: 75 e1 jne 10 <func+0x10>
2f: 48 81 c4 80 a9 03 00 add rsp,0x3a980
36: 5b pop rbx
37: c3 ret
Дизассемблирование раздела .text.startup:
0000000000000000 <main>:
0: bf 61 00 00 00 mov edi,0x61
5: 31 c0 xor eax,eax
7: e9 00 00 00 00 jmp c <main+0xc>
Код:
gcc версия 4.8.2 (GCC)
Дабы предотвратить разговоры в стиле "gcc - несовременный компилятор", ожидаю примеры генерации кода с упомянутой оптимизацией и указанием используемого компилятора и его версии.