Share via


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:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

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:

acos

cosh

pow

tanh

asin

fmod

sinh

 

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):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

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.

Vea también

Referencia

Directives pragma y la palabra clave __pragma

Función intrínseca del compilador