Hlavní navigace

Názor ke článku C++: Mapování hodnot z runtime na integrální konstanty od Marek Knápek - Tak jsem si s tím trochu pohrál a...

  • 5. 6. 2023 16:52

    Marek Knápek

    Tak jsem si s tím trochu pohrál a dostal jsem se na 97 řádků assembleru (tak, jak to vypisuje CompilerExplorer) versus Novačisko 109 až 122. Použil jsem old-school techniku rekurzivní šablony třídy s explicitní specializací k zastavení rekurze. Nevyrábím jump-table, místo toho vyrábím dlouhý řetěz if-else-if-else-if-else. Nepředávám lambdu, pouze její typ, předpokládám totiž, že lambda bude state-less. Na neplatný index testuji mnohem dříve.

    Moje varianta je lepší v tom, že je toho méně kódu. Jednodušší, čitelnější, pochopitelnější, udržovatelnější kód. Bude fungovat i se staršími kompilery, jako je třeba C++98.

    Moje varianta je horší v tom, že je to run-time if-else-if-else-if-else, to zabírá místo v binárce a spotřebovává run-time čas. Kdežto jump-table spotřebuje méně run-time času a zdá se (překvapivě), že zabírá více místa v binárce. Možná bude všechno jinak, když nebudou varianty pouze 4 ale třeba 40, 400, apod?

    https://godbolt.org/z/ezs88r5z6

    Marek.