当__builtin_memcpy被libc的memcpy替换时

问题描述 投票:16回答:1

在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?

gcc c99 memcpy built-in
1个回答
14
投票

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

除非你用-fno-builtin-ansi-std=c89或类似的东西进行编译,否则你使用__builtin_前缀是否真的无关紧要。

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

© www.soinside.com 2019 - 2024. All rights reserved.