intrinsic
Указывает, что функции, заданные в списка аргументов этой директивы, вызываются как встроенные.
#pragma intrinsic( function1 [, function2, ...] )
Заметки
Директива #pragma intrinsic указывает компилятору, что поведение функции известно. Компилятор может вызвать функцию и не заменять вызов функции подставляемыми инструкциями, если это позволит повысить производительность.
Ниже перечислены функции библиотеки со встроенными формами. Объявленная директива #pragma intrinsic начинает применяться для первого определения функции, в котором содержится заданная встроенная функция. Ее действие продолжается до конца исходного файла или до появления директивы #pragma function, задающей ту же самую встроенную функцию. Директива #pragma function может использоваться только за пределами определения функции — на глобальном уровне.
Следующие функции имеют встроенные формы, которые используются, если задан параметр /Oi:
|
|||
|
|||
|
Программы, в которых используются встроенные функции, выполняются быстрее, поскольку они не порождают дополнительную нагрузку, связанную с вызовом функций. Однако они могут иметь больший размер, поскольку в них создается дополнительный код.
Специфика для платформы x86
Встроенные функции _disable и _enable создают инструкции режима ядра, включающие и отключающие прерывания. Они могут использоваться в драйверах, работающих в режиме ядра.
Пример
Скомпилируйте следующий код из командной строки с параметрами "cl -c -FAs sample.c" и просмотрите файл sample.asm. Вы увидите, что в нем включены инструкции CLI и STI для процессоров x86.
// 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() {
}
Специфика для платформы x86 — окончание
Функции с плавающей запятой, перечисленные ниже, не имеют полноценных встроенных форм. Однако у них есть версии, позволяющие передавать аргументы напрямую в микросхему операций с плавающей запятой, а не помещать их в стек программы:
|
Если задан параметр /Oi, /Og и /fp:fast (или любой параметр, в котором содержится параметр /Og: /Ox, /O1 и /O2), то у следующих функций имеются полноценные встроенные формы:
|
|
|
Чтобы отключить создание полноценных вариантов функций с плавающей запятой, установите параметр компилятора /fp:strict или /Za. В этом случае функции будут создаваться как библиотечные процедуры, которые передают аргументы напрямую в микросхему операций с плавающей запятой, а не в стек программы.
Дополнительные сведения о том, как включать или отключать встроенные функции в блоке исходного текста, а также примеры их использования см. в разделе #pragma function.