ठीक है, मैंने देखा कि कोई कह रहा है कि यह किसी भी "चतुर" आधुनिक संकलक द्वारा डिफ़ॉल्ट रूप से अनुकूलित है। वैसे अनुकूलन के बिना परिणामों को देखो। मैंने कोशिश की:
न्यूनतम सी कोड:
#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 -mm = 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
.....