Quando __builtin_memcpy é substituído pelo memcpy da libc

Existe uma versão do C99 / posixmemcpy função no GCC:__builtin_memcpy.

Às vezes, ele pode ser substituído pelo GCC para a versão embutida do memcpy e, em outros casos, é substituído pela chamada ao memcpy da libc. Por exemplo. Foi observadoAqui:

Finalmente, em uma nota do compilador, __builtin_memcpy pode retornar a emitir uma chamada de função memcpy.

Qual é a lógica nesta seleção? É a mesma lógica em outros compiladores compatíveis com o gcc, como o clang / llvm, o compilador intel c ++, o PCC, o suncc (oracle studio)?

Quando eu deveria preferir usar o __builtin_memcpy sobre o memcpy simples?

questionAnswers(1)

yourAnswerToTheQuestion