글쎄, 누군가 "영리한"현대 컴파일러에 의해 기본적으로 최적화되어 있다고 말하는 것을 알아 차렸다. 그나저나 최적화없이 결과를보십시오. 나는 시도했다 :
최소 C 코드 :
#include <stdio.h>
#include <string.h>
int main()
{
char *s="aaaa";
for (int i=0; i<strlen(s);i++)
printf ("a");
return 0;
}
내 컴파일러 : g ++ (Ubuntu / Linaro 4.6.3-1ubuntu5) 4.6.3
어셈블리 코드 생성 명령 : g ++ -S -masm = intel test.cpp
Gotten assembly code at the output:
...
L3:
mov DWORD PTR [esp], 97
call putchar
add DWORD PTR [esp+40], 1
.L2:
THIS LOOP IS HERE
**<b>mov ebx, DWORD PTR [esp+40]
mov eax, DWORD PTR [esp+44]
mov DWORD PTR [esp+28], -1
mov edx, eax
mov eax, 0
mov ecx, DWORD PTR [esp+28]
mov edi, edx
repnz scasb</b>**
AS YOU CAN SEE it's done every time
mov eax, ecx
not eax
sub eax, 1
cmp ebx, eax
setb al
test al, al
jne .L3
mov eax, 0
.....