Intrínseco

 

Para obter a documentação mais recente do Visual Studio 2017 RC, consulte a documentação do Visual Studio 2017 RC.

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

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

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_outpfabsstrcmp
_enable_outpwlabsstrcpy
_inp_rotlmemcmpstrlen
_inpw_rotrmemcpy
_lrotl_strsetmemset
_lrotrabsstrcat

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.

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:

acoscoshpowtanh
asinfmodsinh

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

atanexplog10sqrt
atan2logsintan
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.

Diretivas Pragma e a palavra-chave __Pragma
Intrínsecos do compilador

Mostrar: