Nowy wpis na moim blogu. Druga część posta o "function multi-versioning". Tym razem o problemach z użyciem "multi-versioningu" w połączeniu z "builtins" (przepraszam za słownictwo)
https://extensa.tech/blog/multi-versioning-problem-part2/

Tak, wciąż jest assembler, więcej niż kiedykolwiek... Ale na pocieszenie są też obrazki.

#cpp #cplusplus #programowanie #extensa #blog
terion - Nowy wpis na moim blogu. Druga część posta o "function multi-versioning". Ty...

źródło: comment_b1KnHGiqBSNnid5rE6yl2CWFb6oP7Cti.jpg

Pobierz
@terion: GCC wspiera multi-version poza C++?

Przeglądając glibc można podejrzeć sobie implementację na piechotę w C dla niektórych funkcji z stdlib. Przykładowo, dobrze znany memset() zaimplementowany jest kilka sposobów. Kod wybierający właściwą wersję jest tutaj: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/x86_64/multiarch/ifunc-memset.h;h=0c25eae4a48d5c9400a7fbd3d738448fe28f9603;hb=HEAD a poszczególne implementacje tutaj: https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/x86_64/multiarch;hb=HEAD pliki memset-*.S
@b33zon:
Hej. Nie chodzi o optymalizację.
Dodaj sobie przełącznik -std=c++11 albo -std=c++17 i ffsl() będzie wołane, a nie inlineowane.
Ale faktycznie jestem zaskoczony, że na domyślnych ustawieniach beż żadnych flag jest włączone -std=gnu++11

Generalnie wniosek z tego taki, że warto mieć włączone i -std=gnu++XX i używać builtin, bo z jednej strony są jakieś dodatkowe optymalizacje, a z drugiej strony dla builtin jest lepsza gwarancja, że będzie zawsze inline.