В GCC есть версия функции C99/posix memcpy
:__builtin_memcpy
..
Иногда его можно заменить с помощью GCC на встроенную версию memcpy, а в других случаях он заменяется вызовом memcpy из libc. Например. было отмечено здесь:
Finally, on a compiler note, __builtin_memcpy can fall back to emitting a memcpy function call.
Какова логика в этом выборе? Одинакова ли логика в других компиляторах, совместимых с gcc -, таких как clang/llvm, компилятор Intel C++, PCC, suncc (oracle studio )?
Когда я должен предпочесть использование __встроенной _memcpy вместо простой memcpy?