当__builtin_memcpy被libc的memcpy替换时

时间:2012-07-31 19:50:38

标签: gcc c99 memcpy built-in

GCC中有一个C99 / posix memcpy函数版本:__builtin_memcpy

有时可以将GCC替换为内联版本的memcpy,在其他情况下,它可以通过调用libc的memcpy来代替。例如。有人注意到here

  

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

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

什么时候我更喜欢使用__builtin_memcpy而不是简单的memcpy?

1 个答案:

答案 0 :(得分:14)

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

除非您使用-fno-builtin-ansi-std=c89或类似内容进行编译,否则您使用__builtin_前缀的确无关紧要。

虽然很难遵循,但是拒绝发出库调用或代码块的代码似乎是here