有一个C99/posix版本memcpy
海湾合作委员会的功能:__builtin_memcpy
.
有时它可以被 GCC 替换为 memcpy 的内联版本,而在其他情况下它可以通过调用 libc 的 memcpy 来替换。例如。有人指出here http://lwn.net/Articles/29183/:
最后,在编译器注释中, __builtin_memcpy 可以回退到发出 memcpy 函数调用。
这个选择的逻辑是什么?其他兼容 gcc 的编译器(如 clang/llvm、intel c++ 编译器、PCC、suncc (oracle studio))中的逻辑是否相同?
什么时候我应该更喜欢使用 __builtin_memcpy 而不是普通的 memcpy?
我前一段时间一直在尝试内置替换,我发现<string.h>
仅当源参数的大小在编译时已知时,函数才会被替换。在这种情况下,调用libc
直接被展开的代码替换。
除非你编译-fno-builtin
, -ansi
, -std=c89
或类似的东西,实际上你是否使用并不重要__builtin_
是否有前缀。
尽管很难理解,但决定是否发出库调用或代码块的代码似乎是here http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/expr.c;h=7e909bc0f5c8035cfe17f643cbad826c2d41cd6c;hb=9bcca88e24e64d4e23636aafa3404088b13bcb0e#l1102.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)