intrinsic pragma

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

Sintaxe

#pragma intrinsic( function_1 [, function_2 ... ])

Comentários

O intrinsicpragma 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 intrinsicpragma ser considerado, ele entre 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 functionpragma que especifique a mesma função intrínseca. O intrinsicpragma 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:

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. No entanto, eles podem ser maiores devido ao código adicional gerado.

Exemplo específico do 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() {
}

Funções de ponto flutuante intrínsecas

Essas funções de ponto flutuante não têm formas intrínsecas verdadeiras. Em vez disso, elas têm versões que passam argumentos diretamente para o chip de ponto flutuante em vez enviá-los para a pilha do programa:

Essas funções de ponto flutuante têm formas intrínsecas verdadeiras quando você especifica /Oi e /fp:fast (ou qualquer opinião que inclua /Oi: /Ox, /O1 e /O2):

Você pode usar /fp:strict ou /Za para substituir a geração de opções de ponto flutuante intrínsecas verdadeiras. 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 #pragma function para obter informações e um exemplo de como habilitar/desabilitar intrínsecos para um bloco de texto de origem.

Confira também

Pragmadiretivas e as __pragma palavras-chave e _Pragma
Intrínsecos do compilador