c++ - 什么是内在函数?

标签 c++ c intrinsics

谁能解释它们是什么以及我为什么需要它们?如果我需要使用内在函数,我会构建什么样的应用程序?

最佳答案

内在函数是编译器在可能的情况下直接实现的函数,而不是链接到函数库提供的实现。

一个常见的例子是 strncpy()

对于短字符串,对 strncpy() 进行函数调用,其中涉及设置带有返回地址的“堆栈帧”,将比实际复制字节消耗更多时间。更糟糕的是,对 CPU 预取缓冲区的影响会使 CPU 执行停滞几个时钟周期。

相反,内部函数是由编译器实现的,而不是函数调用。在strncpy()的例子中,字节复制代码直接在strncpy()被调用的地方发出。

类似于这个 strncpy() 示例,如果满足所需的约束,每个内部函数都直接作为内联代码实现。

内部函数的非内部拷贝通常仍存在于标准库中,以防需要函数的地址。

与内联函数相比,内部函数由编译器提供。在 C 程序的源代码中没有编写内部函数的地方,也没有必须链接到的库实现。内联函数的不同之处在于编译器读取内联函数的源代码,但相似之处在于稍后它可以将内联函数的编译翻译直接发送到目标代码中,省略了函数调用的开销。

简而言之,内在函数和内联函数之间的实际区别在于,即使您没有 #include 包含函数声明的所需头文件,内在函数也“存在”。对于内联函数,带有函数声明的头文件必须先#include(或以其他方式声明)。

关于c++ - 什么是内在函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268562/

相关文章:

c++ - 快速获取 "improve"单位长度 vector 的长度

c++ - “链接 CXX 可执行文件 worldserver”失败

c++ - C++ 标准中哪里说::delete 可以更改左值?

c++ - 从txt文件读取并创建对象

c - 为什么将 ucontext 添加到 POSIX,然后又从 POSIX 中删除?

没有显式内在函数的 CUDA 半浮点运算

c++ - 程序拒绝进入第二条语句

c - 如何获取读取字节数

C++ 双重比较的非常奇怪的行为