GCC:memcpy函数中有一个C99/posix函数的版本:__builtin_memcpy。
有时它可以被GCC替换成内联版本的memcpy,而在其他情况下,它可以被调用libc的memcpy所取代。人们注意到了这里
最后,在编译器方面,__builtin_memcpy可以返回到发出memcpy函数调用。
这个选择的逻辑是什么?在其他兼容gcc的编译器中,比如clang/llvm,intel c++编译器,PCC,suncc (oracle ),这是一样的逻辑吗?
什么时候我更喜欢使用__builtin_memcpy而不是普通的memcpy?
发布于 2012-09-04 23:05:28
一段时间前,我一直在试验内置的替换,我发现只有在编译时可以知道源参数的大小时,<string.h>函数才会被替换。在这种情况下,对libc的调用直接被展开代码替换。
除非您使用-fno-builtin、-ansi、-std=c89或其他类似的语言进行编译,否则使用__builtin_前缀实际上并不重要。
虽然很难理解,但决定是否发出库调用或代码块的代码似乎是这里。
https://stackoverflow.com/questions/11747891
复制相似问题