Поделиться через


intrinsic pragma

Указывает, что вызовы функций, указанных в списке pragmaаргументов, являются встроенными.

Синтаксис

#pragma intrinsic( function_1 [, function_2 ... ])

Замечания

Компилятор intrinsicpragma сообщает компилятору, что функция имеет известное поведение. Компилятор может вызвать функцию и не заменять вызов функции подставляемыми инструкциями, если это позволит повысить производительность.

Ниже перечислены функции библиотеки со встроенными формами. intrinsicpragma После того как он будет замечен, он вступает в силу при первом определении функции, содержащей указанную встроенную функцию. Эффект продолжается до конца исходного файла или к внешнему виду functionpragma указанной встроенной функции. Его intrinsicpragma можно использовать только за пределами определения функции на глобальном уровне.

Следующие функции имеют встроенные формы, а встроенные формы используются при указании /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 слова
Встроенные компоненты компилятора