ভাল, আমি লক্ষ্য করেছি যে কেউ বলছে যে এটি কোনও "চালাক" আধুনিক সংকলক দ্বারা ডিফল্টরূপে অনুকূলিত হয়েছে। উপায় দ্বারা অপ্টিমাইজেশন ছাড়া ফলাফল দেখুন। আমি চেষ্টা করেছি:
ন্যূনতম সি কোড:
#include <stdio.h>
#include <string.h>
int main()
{
char *s="aaaa";
for (int i=0; i<strlen(s);i++)
printf ("a");
return 0;
}
আমার সংকলক: g ++ (উবুন্টু / লিনারো 4.6.3-1ubuntu5) 4.6.3
সমাবেশ কোড উত্পন্ন করার জন্য কমান্ড: g ++ -S -masm = ইন্টেল টেস্ট কোডপিপি
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
.....