Sytuacja bardzo charakterystyczna dla, na przykład Raspberry Pi.
Procedura napisana w Pascalu, skompilowana do natywnego kodu, wykonuje się 20 razy wolniej niż robiąca to samo procedura, ale napisana w żywym asemblerze.
Różnica jest taka, że w procedurze pisanej w asm upchałem ile się da zmiennych w rejestry, wykorzystując nawet R14, na co żaden kompilator się nie odważy. Poza tym procedura, po uprzednim zdjęciu blokady dostępu z RAMu wykorzystuje obszar kodu na zmienne lokalne.
Dzięki temu większość operacji procesor robi na rejestrach, od czasu do czasu ładując coś lub zapisując do RAMu pojedynczymi instrukcjami ldr/str
Ponieważ kompilator nie dotknie nie tylko r14, ale jeszcze paru innych, spora część zmiennych w wersji kompilowanej przechowywana jest w pamięci i to w obszarze danych, co powoduje że na jeden dostęp do zmiennej potrzebne są 2 instrukcje ldr/str.
No i procesor stoi, czekając na dane z pamięci - LDR kosztuje w malinie trójce, tak na oko, jakieś 3 nanosekundy. ALU mogłoby w tym czasie wykonać kilka instrukcji, ale nie robi. Bo czeka.
Tylko kto dziś, w czasach wszechobecnego Pythona i Javascriptu, zwraca na to w ogóle uwagę?