__builtin_前缀在标准库实现中的含义是什么?

时间:2014-01-24 14:39:03

标签: c++ stl

在我的标准库实现的源文件中,我可以看到许多名称前缀为__builtin_的方法,即:__builtin_memmove。这是什么意思?在什么意义上这些方法内置

template<bool _IsMove>
    struct __copy_move<_IsMove, true, random_access_iterator_tag>
    {
      template<typename _Tp>
        static _Tp*
        __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
        {
      __builtin_memmove(__result, __first,
                sizeof(_Tp) * (__last - __first));
      return __result + (__last - __first);
    }
    };

这些只是对二进制代码的调用吗?调试器无法进入它。

2 个答案:

答案 0 :(得分:4)

这只是编译器的内部实现,对于gcc我们可以访问他们的文档以更好地理解它们:Other Built-in Functions Provided by GCC并且它说:

  

GCC提供了除上述功能之外的大量内置功能。其中一些用于处理异常或可变长度参数列表的内部用途,因此它们可能会不时发生变化,因此未在此处记录。我们不建议一般使用这些功能。

     

其余功能仅用于优化目的。

     

GCC包含标准C库中许多功能的内置版本。即使您指定-fno-builtin选项,前缀为_ builtin 的版本也始终被视为与C库函数具有相同的含义。

如果我们转到Options Controlling C Dialect,则会显示-fno-builtin-function标志(强调我的):

  

[...] GCC通常会生成特殊代码来更有效地处理某些内置函数;例如,对alloca的调用可能会成为直接调整堆栈的单个指令,而对memcpy的调用可能会成为内联复制循环。生成的代码通常更小更快,但由于函数调用不再显示,您无法在这些调用上设置断点,也无法通过链接来更改函数的行为不同的图书馆。[...]

对于clang,您可以here

答案 1 :(得分:1)

它不是关键字,它只是GCC和Clang遵循编译器内置函数的命名约定。