Also als erstes zählen, die Algorithmen.
Basic QuickSort ist schneller als asm bubble sort, wenn man 20k Elemente sortieren will.
Bei asm kann man viel falsch machen, bei C dagegen fast nichts.
Hm, also ich bringe nochmal ein Beispiel für C-Code und den asm-code dazu:
bool IsPrime(unsigned int x)
{
switch (x)
{
case 0:
case 1:
return false;
case 2:
return true;
default:
if (x % 2 == 0)
return false;
for (unsigned int i = 3; i < fastIntSqrt(x); i++)
{
if (x % i == 0)
return false;
}
return true;
}
}
(ja, ist C++, wegen bool)
und jetzt der asm-code (mit dem C-Code dazwischen)
bool IsPrime(unsigned int x)
{
push ebx
mov ebx,eax
switch (x)
cmp ebx,1
jbe IsPrime+11h (4010B1h)
cmp ebx,2
jne IsPrime+15h (4010B5h)
case 2:
return true;
mov al,1
pop ebx
}
}
ret
{
case 0:
case 1:
return false;
xor al,al
pop ebx
}
}
ret
default:
if (x % 2 == 0)
test bl,1
return false;
je IsPrime+11h (4010B1h)
push esi
for (unsigned int i = 3; i < fastIntSqrt(x); i++)
mov esi,3
call fastIntSqrt (401000h)
mov ecx,eax
cmp ecx,esi
jbe IsPrime+41h (4010E1h)
jmp IsPrime+30h (4010D0h)
lea ecx,[ecx]
{
if (x % i == 0)
xor edx,edx
mov eax,ebx
div eax,esi
test edx,edx
je IsPrime+46h (4010E6h)
add esi,1
cmp esi,ecx
jb IsPrime+30h (4010D0h)
pop esi
}
return true;
mov al,1
pop ebx
}
}
ret
pop esi
return false;
xor al,al
pop ebx
}
}
ret
Was kann man da noch großartig optimieren?
Achso, der Compiler hat nicht c-aufrufkonvention genommen, sondern einfach x per eax übergeben! Ist übrigens MS VC++, weiß nich, ob gcc das auch machen kann.
Die stellen, wo der Compiler scheiße ausspuckt sind imo sehr selten und ich guck mir eigentlich immer den asm-code an, damit ich sehe, das er net nur scheiße macht.
Also, ohne Optimierung ist klar, das des net gut ist, aber mit -O3?
gebe mal Beispiel
Ok, teilweise sind einige stellen redundant, aber sowas zu erkennen, noch ein, zwei Jahre und Handoptimierungen kann man sich gänzlich sparen (vor allem auch weil für verschiedene CPU's unterschiedlich optimiert werden muss, beim Compiler einfach switch für ne andere Cpu angeben, aber asm muss neucoden)
Ich bin zuversichtlich!
MfG
DDR-RAM