Share via


intrinsic pragma

Especifica que las llamadas a funciones incluidas en la lista de argumentos de pragma sean intrínsecas.

Sintaxis

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

Comentarios

La intrinsicpragma indica al compilador que una función tiene un comportamiento conocido. El compilador puede llamar a la función y no reemplazar la llamada a función con instrucciones alineadas si ello mejora el rendimiento.

A continuación se enumeran las funciones de biblioteca con formas intrínsecas. Una vez vista una intrinsicpragma, se aplica a la primera definición de función que contenga una función intrínseca especificada. El efecto continúa hasta el final del archivo de código fuente o hasta la aparición de una functionpragma que especifique la misma función intrínseca. La directiva intrinsicpragma solo se puede usar fuera de una definición de función, en el nivel global.

Las siguientes funciones tienen formas intrínsecas que se utilizan cuando se especifica /Oi:

Los programas que usan funciones intrínsecas son más rápidos, porque carecen de la sobrecarga de las llamadas a función. Sin embargo, pueden ser más grandes debido al código adicional generado.

Ejemplo específico de x86

Las formas intrínsecas _disable y _enable generan instrucciones en modo kernel para deshabilitar/habilitar interrupciones, y podrían ser útiles en controladores en modo kernel.

Compile el código siguiente en la línea de comandos con cl -c -FAs sample.c y consulte sample.asm para comprobar si se convierten en CLI y STI de instrucciones 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() {
}

Funciones de punto flotante intrínsecas

Estas funciones de punto flotante no tienen formas intrínsecas verdaderas. En vez de ello, tienen versiones que pasan argumentos directamente al chip de punto flotante en lugar de insertarlos en la pila:

Estas funciones de punto flotante cuentan con formas intrínsecas cuando especifica /Oi y /fp:fast (o cualquier opción que incluya /Oi: /Ox, /O1 y /O2):

Puede utilizar /fp:strict o /Za para invalidar la generación de opciones de punto flotante realmente intrínsecas. En este caso, las funciones se generan como rutinas de biblioteca que pasan los argumentos directamente al chip de punto flotante, en lugar de insertarlos en la pila del programa.

Consulte #pragma function para obtener información y un ejemplo de cómo habilitar y deshabilitar formas intrínsecas para un bloque de texto de origen.

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma
Intrínsecos del compilador