Partilhar via


Intrínseco

Especifica que as chamadas para as funções especificadas na lista de argumentos do pragma são intrínsecas.

#pragma intrinsic( function1 [, function2, ...] )

Comentários

O pragma intrinsic diz ao compilador que uma função tem um comportamento conhecido. O compilador pode chamar a função e não substituir a chamada de função pelas instruções embutidas, se isso resultar em um melhor desempenho.

As funções da biblioteca com formas intrínsecas estão listadas abaixo. Após um pragma intrinsic ser considerado, ele entra em vigor na primeira definição de função que contém uma função intrínseca especificada. O efeito continua até o final do arquivo de origem ou até o aparecimento de um pragma function que especifica a mesma função intrínseca. O pragma intrinsic pode ser usado apenas para uma definição de função — no nível global.

As seguintes funções têm formas intrínsecas e as formas intrínsecas são usadas quando você especifica /Oi:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

 

_lrotl

_strset

memset

 

_lrotr

abs

strcat

 

Os programas que usam funções intrínsecas são mais rápidos porque não têm a sobrecarga das chamadas de função, mas podem ser maiores devido ao código adicional gerado.

Específico para x86

Os intrínsecos _disable e _enable geram instruções no modo kernel para desabilitar/habilitar interrupções e podem ser úteis nos drivers do modo kernel.

Exemplo

Compile o código a seguir na linha de comando com "cl -c -FAs sample.c" e verifique sample.asm para ver que eles se transformam em CLI e STI de instruções 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() {
}

Fim de Específico para x86

As funções de ponto flutuante listadas abaixo não têm formas intrínsecas reais. Elas têm versões que passam argumentos diretamente para o chip de ponto flutuante em vez enviá-los para a pilha do programa:

acos

cosh

pow

tanh

asin

fmod

sinh

 

As funções de ponto flutuante listadas abaixo têm formas intrínsecas reais quando você especifica /Oi, /Og e /fp:fast (ou qualquer opção que incluir /Og: /Ox, /O1 e /O2):

atan

exp

log10

sqrt

atan2

log

sin

tan

cos

 

 

 

Você pode usar /fp:strict ou /Za para substituir a geração de opções de ponto flutuante intrínsecas reais. Nesse caso, as funções são geradas como rotinas de biblioteca que passam argumentos diretamente para o chip de ponto flutuante em vez de enviá-los para a pilha do programa.

Consulte Função # pragma para obter informações e um exemplo de como habilitar/desabilitar intrínsecos para um bloco de texto de origem.

Consulte também

Referência

Diretivas Pragma e a palavra-chave __Pragma

Intrínsecos do compilador