intrinsic
Especifica que las llamadas a funciones incluidas en la lista de argumentos de pragma sean intrínsecas.
#pragma intrinsic( function1 [, function2, ...] )
Comentarios
La directiva pragma intrinsic 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 detectada una directiva pragma intrinsic, se aplica en 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 directiva pragma function que especifique la misma función intrínseca. La directiva pragma intrinsic 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, pero pueden tener un mayor tamaño debido al código adicional que se genera.
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.
Ejemplo
Compile el código siguiente en la línea de comandos con "cl -c -FAs sample.c" y consulte sample.asm para comprobar la conversión a instrucciones x86 CLI y 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() {
}
Fin de Específico de x86
Las funciones de punto flotante enumeradas a continuación no tienen formas intrínsecas auténticas. Tienen versiones que pasan argumentos directamente al chip de punto flotante en lugar de insertarlos en la pila del programa:
|
Las funciones de punto flotante enumeradas a continuación tienen formas intrínsecas auténticas cuando se especifica /Oi, /Og y /fp:fast (o cualquier opción que incluya /Og: /Ox, /O1 y /O2):
|
|
|
Puede utilizar /fp:strict o /Za para reemplazar 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.
Vea función #pragma para obtener información y un ejemplo de cómo habilitar/deshabilitar formas intrínsecas para un bloque de texto de origen.