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 intrinsic
pragma 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 intrinsic
pragma, 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 function
pragma que especifique la misma función intrínseca. La directiva intrinsic
pragma 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
Pragmadirectivas y las __pragma
palabras clave y _Pragma
Intrínsecos del compilador