Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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