drac030: Z przykrością muszę stwierdzić, że wykazujesz ignorację w zakresie budowy kompilatorów.
Praktycznie wszystkie kompilatory C wykonują również optymalizację pod konkretną maszynę, czasami również przez analizę wygenerowanego przez nie "wprost" kodu asemblerowego. Rezultaty są rewelacyjne. Np. cc65 analizuje kod 6502 i może stwierdzić takie rzeczy, jak np. że w określonym miejscu kodu rejestr X ma zawsze wartość zero, więc LDX #0 jest tam zbędne.
Pytanie o optymalizację było jak najbardziej na miejscu. Jeśli jej nie włączysz, to generowany jest kod, który najprościej wygenerować. Ma on wtedy wydajność porównywalną z BASICiem (jeśli nie gorszą w przypadku lepszych BASICów). Różnica może być nie tylko 6-krotna, lecz 60- i więcej-krotna.
kompilator nie ma bladego pojęcia, co kompilowany program robi, oraz jak można wykorzystać architekturę danej maszyny do zrobienia tego lepiej.
Jest dokładnie odwrotnie. Program jest precyzyjnym zapisem algorytmu, więc kompilator dobrze go rozumie.
Kompilator ma mnóstwo informacji o architekturze konkretnych modeli procesorów, które ciężko znaleźć w opasłych dokumentacjach dla ludzi, np. w jakiej kolejności umieścić instrukcje, aby jak najwięcej z nich wykonało się równolegle. Tego typu rzeczy znacznie się różnią między poszczególnymi modelami procesorów (np. Pentium a Pentium Pro).
To wie tylko człowiek, bo tylko człowiek jest w stanie zrozumieć algorytm.
Samo zrozumienie nic tu nie wnosi, dopóki nie zmienisz algorytmu. Nie ma tu żadnej różnicy między asemblerem, C ani BASICiem.