intrinsic pragma

Specifica che le chiamate alle funzioni specificate nell'elenco pragmadi argomenti sono intrinseche.

Sintassi

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

Osservazioni:

Indica intrinsicpragma al compilatore che una funzione ha un comportamento noto. Il compilatore può chiamare la funzione e non sostituire la chiamata di funzione con istruzioni inline, se questo può garantire prestazioni migliori.

Le funzioni di libreria con formato intrinseco sono elencate di seguito. intrinsicpragma Una volta visualizzato, viene applicata alla prima definizione di funzione contenente una funzione intrinseca specificata. L'effetto continua fino alla fine del file di origine o all'aspetto di un oggetto functionpragma che specifica la stessa funzione intrinseca. Può intrinsicpragma essere usato solo all'esterno di una definizione di funzione, a livello globale.

Le funzioni seguenti includono forme intrinseche e le forme intrinseche vengono usate quando si specifica /Oi:

I programmi che usano funzioni intrinseche sono più veloci perché non hanno il sovraccarico delle chiamate di funzione. Tuttavia, possono essere maggiori a causa del codice aggiuntivo generato.

Esempio specifico di x86

Gli _disable oggetti intrinseci e _enable generano istruzioni in modalità kernel per disabilitare o abilitare gli interrupt e potrebbero essere utili nei driver in modalità kernel.

Compilare il codice seguente dalla riga di comando con cl -c -FAs sample.c e osservare sample.asm che si trasformano in istruzioni x86 cli 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() {
}

Funzioni a virgola mobile intrinseche

Queste funzioni a virgola mobile non hanno forme intrinseche vere. Hanno invece versioni che passano argomenti direttamente al chip a virgola mobile, anziché eseguirne il push nello stack:

Queste funzioni a virgola mobile hanno forme intrinseche vere quando si specificano /Oi e /fp:fast (o qualsiasi opzione che include /Oi: /Ox, /O1e /O2):

È possibile usare /fp:strict o /Za per eseguire l'override della generazione di vere opzioni intrinseche a virgola mobile. In tal caso le funzioni vengono generate come routine della libreria che passano gli argomenti direttamente al chip a virgola mobile anziché inserirli nello stack del programma.

Vedere #pragma function per informazioni e un esempio su come abilitare e disabilitare le funzioni intrinseche per un blocco di testo di origine.

Vedi anche

Direttive Pragma e parole __pragma chiave e _Pragma
Intrinseci del compilatore