intrinsic
pragma
指定对 pragma 参数列表中指定的函数的调用是内部的。
语法
#pragma intrinsic(
function_1 [,
function_2 ... ])
注解
intrinsic
pragma 告知编译器某个函数已了解行为。 编译器可以调用函数,并且不将函数调用替换为内联说明(如果将实现更好的性能)。
下面列出了带内部形式的库函数。 一旦显示 intrinsic
pragma,它将在包含指定的内部函数的第一个函数定义中生效。 该效果持续到源文件的末端或指定相同内部函数的 function
pragma 外观。 intrinsic
pragma 只能在函数定义之外用于全局级。
以下函数具有内部形式,在指定 /Oi
时会使用这些内部形式:
使用内部函数的程序会更快,因为没有函数调用开销。 但是,由于生成了额外的代码,这些程序可能会比较大。
特定于 x86 的示例
_disable
和 _enable
内部函数生成内核模式说明以禁用或启用中断,并且在内核模式驱动程序中很有用。
利用 cl -c -FAs sample.c
从命令行中编译以下代码,并查看 sample.asm
以了解它们是否转换为 x86 说明 CLI 和 STI:
// pragma_directive_intrinsic.cpp
// processor: x86
#include <dos.h> // definitions for _disable, _enable
#pragma intrinsic(_disable)
#pragma intrinsic(_enable)
void f1(void) {
_disable();
// do some work here that should not be interrupted
_enable();
}
int main() {
}
内部浮点函数
这些浮点函数没有真正的内部形式。 相反,它们具有的版本会直接将自变量传递到浮点芯片而不是将其推送到堆栈上:
指定 /Oi
和 /fp:fast
(或包括 /Oi
的任何选项:/Ox
、/O1
和 /O2
)时,这些浮点函数具有真正的内在形式:
你可以使用 /fp:strict
或 /Za
重写真正的内部浮点选项的生成。 在此情况下,函数将生成为库例程,后者将参数直接传递到浮点芯片,而不是将参数推送到程序堆栈。
有关如何启用和禁用内部源文本块的信息和示例,请参阅 #pragma function
。