( BaT | 2020. 10. 21., sze – 22:14 )

Gondoltam érdemes megnézni, hogy mit kezdenek vele a fordítók, különösen ha "sok" adatot kell átmásolni. Szerencsére mindenre van online tool, összehasonlítás a gcc, clang és msvc fordítókkal x86-64 targetre.

Ha a struktúra megfelelően kicsi, akkor nagyjából ugyanazt csinálja mindhárom, szépen átmásolja 8 byteonként az adatot. Abban nincs egyezség, hogy mi számít kicsinek, ez a gcc-nek 256, a clangnak 32, az msvc-nek csak 8 byte. Továbbá apró különbség, hogy a gcc egyszerre két regisztert használ, a clang és az msvc csak egyet.

Ha a struktúra megfelelően nagy, akkor nagyobb az eltérés. A gcc és az msvc a rep utasítást használja, előbbi movsq, utóbbi movsb utasítással. A clang egyszerűen meghívja a memcpy-t.