20

memcpyGCC中有一个版本的 C99/posix函数: __builtin_memcpy.

有时它可以被 GCC 替换为内联版本的 memcpy,而在其他情况下,它被调用 libc 的 memcpy 替换。例如,这里指出:

最后,在编译器注释中, __builtin_memcpy 可以退回到发出 memcpy 函数调用。

这个选择的逻辑是什么?其他 gcc 兼容编译器的逻辑是否相同,例如 clang/llvm、intel c++ 编译器、PCC、suncc (oracle studio)?

什么时候我应该更喜欢使用 __builtin_memcpy 而不是普通的 memcpy?

4

1 回答 1

20

前段时间我一直在尝试使用内置替换,我发现<string.h>只有在编译时可以知道源参数的大小时才会替换这些函数。在这种情况下,调用将libc直接由展开的代码替换。

-fno-builtin除非您使用,或类似的东西进行编译-ansi,否则您是否使用前缀-std=c89实际上并不重要。__builtin_

虽然很难理解,但决定是否发出库调用或一段代码的代码似乎在这里

于 2012-09-04T23:05:28.017 回答