我正在尝试理解GCC中std::pow函数的工作原理。我查看了cmath库的源代码,链接如下:https://code.woboq.org/gcc/libstdc++-v3/include/c_global/cmath.html#_ZSt3powff。
在该文件的第388行,当浮点类型作为参数传递时,他们给出了pow的定义,如下所示:
在该文件的第388行,当浮点类型作为参数传递时,他们给出了pow的定义,如下所示:
#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
inline _GLIBCXX_CONSTEXPR float
pow(float __x, float __y)
{ return __builtin_powf(__x, __y); }
这个 pow 函数调用另一个函数 __builtin_powf。
我想知道的是,__builtin_powf 定义在哪里?我看到它是内置函数,但这并不能帮助我理解它的实现在哪里。我似乎找不到 GCC 源代码中的其他位置有 __builtin_powf。此外,它是如何转换成汇编代码的?
float
(f
)、double
(w
)、int
、long
(l
)和其他几种数学函数的变体。请查看f95-lang.c
文件。 - tadman./configure
脚本,在从源代码构建编译器之前必须执行),因此针对指定目标系统(硬件和操作系统)构建的gcc版本会利用该目标系统上已知的库或机器指令。 - Peter__builtin_XXX
语法的整个目的是用于那些不能被实现为普通函数,而需要在编译时触发一些特殊处理的内容。 在这种情况下,它仅仅是尽可能地进行常量折叠,但是许多其他内置函数执行的操作远非任何真实函数可以执行的操作。 要求它们的源代码就像要求sizeof
函数的源代码一样 - 没有一个写下来可以的单一函数。 - Nate Eldredge