intrinsic
pragma
Указывает, что вызовы функций, указанных в списке pragmaаргументов, являются встроенными.
Синтаксис
#pragma intrinsic(
function_1 [,
function_2 ... ])
Замечания
Компилятор intrinsic
pragma сообщает компилятору, что функция имеет известное поведение. Компилятор может вызвать функцию и не заменять вызов функции подставляемыми инструкциями, если это позволит повысить производительность.
Ниже перечислены функции библиотеки со встроенными формами. intrinsic
pragma После того как он будет замечен, он вступает в силу при первом определении функции, содержащей указанную встроенную функцию. Эффект продолжается до конца исходного файла или к внешнему виду function
pragma указанной встроенной функции. Его intrinsic
pragma можно использовать только за пределами определения функции на глобальном уровне.
Следующие функции имеют встроенные формы, а встроенные формы используются при указании /Oi
:
Программы, использующие встроенные функции, быстрее, так как они не имеют затрат на вызовы функций. Однако они могут быть больше из-за дополнительного кода, созданного.
Пример x86-конкретных
_enable
Встроенные _disable
функции создают инструкции в режиме ядра для отключения или включения прерываний и могут быть полезны в драйверах режима ядра.
Скомпилируйте следующий код из командной строки 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
. сведения и пример включения и отключения встроенных функций для блока исходного текста.
См. также
Pragma директивы и ключевые __pragma
_Pragma
слова
Встроенные компоненты компилятора