tốt, tôi nhận thấy rằng ai đó đang nói rằng nó được tối ưu hóa theo mặc định bởi bất kỳ trình biên dịch hiện đại "thông minh" nào. Nhân tiện nhìn vào kết quả mà không cần tối ưu hóa. Tôi đã thử:
Mã C tối thiểu:
#include <stdio.h>
#include <string.h>
int main()
{
char *s="aaaa";
for (int i=0; i<strlen(s);i++)
printf ("a");
return 0;
}
Trình biên dịch của tôi: g ++ (Ubuntu / Linaro 4.6.3-1ubuntu5) 4.6.3
Lệnh để tạo mã lắp ráp: 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
.....