【发布时间】:2012-07-29 16:17:32
【问题描述】:
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?
【问题讨论】:
-
当大小是编译时间常数并且小于等于8192时,它似乎使用了内联版本。