Cuando __builtin_memcpy se reemplaza con memcpy de libc
Hay una versión de C99 / posixmemcpy
función en GCC:__builtin_memcpy
.
Algunas 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 notóaquí:
Finalmente, en una nota del compilador, __builtin_memcpy puede volver a emitir una llamada a la función memcpy.
¿Cuál es la lógica en esta selección? ¿Es la misma lógica en otros compiladores compatibles con gcc, como clang / llvm, compilador intel c ++, PCC, suncc (oracle studio)?
¿Cuándo debería preferir usar __builtin_memcpy en lugar de memcpy?