Hay una versión de la función C99/posix memcpy
en GCC: __builtin_memcpy
.Cuando __builtin_memcpy se reemplaza por memcpy de libc
A veces puede ser reemplazado por GCC a la versión en línea de memcpy y en otros casos es reemplazado por una llamada a memcpy de libc. P.ej. se observó here:
Por último, en una nota del compilador, __builtin_memcpy puede recurrir a la emisión de una llamada a la función memcpy.
¿Cuál es la lógica en esta selección? ¿Es lógico lo mismo en otros compiladores compatibles con gcc, como clang/llvm, compilador intel C++, PCC, suncc (oracle studio)?
¿Cuándo preferiría usar __builtin_memcpy sobre memcpy simple?
Parece que utiliza una versión en línea cuando el tamaño es una constante de tiempo de compilación y es menor o igual que 8192. –