В GCC есть версия функции C99/posix memcpy
: __builtin_memcpy
.
Иногда он может быть заменен GCC на встроенную версию memcpy, а в других случаях он заменяется вызовом libc memcpy. Например. было отмечено здесь:
Наконец, в примечании к компилятору __builtin_memcpy может вернуться к выдаче вызова функции memcpy.
Какова логика в этом выборе? Является ли это логичным то же самое в других gcc-совместимых компиляторах, таких как clang/llvm, intel С++ compiler, PCC, suncc (oracle studio)?
Когда я предпочитаю использовать __builtin_memcpy поверх простой memcpy?