Partilhar via


intrinsic pragma

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

Sintaxe

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

Comentários

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

As funções da biblioteca com formas intrínsecas estão listadas abaixo. Uma vez que um intrinsicpragma é visto, ele entra em vigor na primeira definição de função contendo uma função intrínseca especificada. O efeito continua até o final do arquivo de origem ou até a aparência de um functionpragma especificando a mesma função intrínseca. O intrinsicpragma só pode ser usado fora de uma definição de função, a 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 de chamadas de função. No entanto, eles podem ser maiores devido ao código adicional gerado.

Exemplo específico de x86

Os intrínsecos _disable e _enable geram instruções de modo kernel para desativar ou habilitar interrupções, e podem ser úteis em drivers de modo kernel.

Compile o seguinte código da linha de comando com cl -c -FAs sample.c e examine sample.asm para ver se eles se transformam em instruções x86 CLI e 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() {
}

Funções intrínsecas de ponto flutuante

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

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

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

Consulte #pragma function para obter informações e um exemplo sobre como ativar e desativar intrínsecas para um bloco de texto de partida.

Ver também

diretivas Pragma e as palavras-chave __pragma e _Pragma
Compilador intrínseco