Istnieje taki mit, że jeżeli chcemy napisać mega optymalny kod, gdzie liczy się każda instrukcja – powinniśmy napisać go ręcznie w asemblerze. Kompilator nie poradzi sobie z tym zadaniem tak dobrze jak człowiek. Zawsze doda jakieś bezsensowne instrukcje trwoniąc w ten sposób cenny czas.
Ja się z tym całkowicie nie zgadzam i w swoich materiałach często pokazuję jak kompilator robi różne optymalizacje, a nam się nie udaje go pobić. Albo kiedy ręcznie robimy w kodzie błędy, a kompilator generuje kod poprawnie. Nie inaczej będzie tym razem, ale nie uprzedzajmy faktów.
Sam wielokrotnie łapałem się na tym, że posądzałem kompilator o bezsensowne działanie. A potem okazywało się, że nie miałem racji. Dlatego teraz staram się nie rzucać przedwcześnie oskarżeń. Z drugiej strony widzę, że nie byłem sam. Pod moimi materiałami nieraz pojawiają się dyskusje o bezsensownych optymalizacjach kompilatora. I zwykle staję wtedy w obronie maszyny.
W dzisiejszym artykule pokażę Case Study przypadku, gdzie kompilator GCC na ARM Cortex-M robi dziwne i “nieoptymalne” operacje.
Continue reading