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