intrinsic
Specifica che le chiamate alle funzioni specificate nell'elenco di argomenti del pragma sono intrinseche.
#pragma intrinsic( function1 [, function2, ...] )
Note
Il pragma intrinsic indica al compilatore che il comportamento di una funzione è 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. Una volta che viene rilevato un pragma intrinsic, verrà applicato alla prima definizione di funzione che contiene una funzione intrinseca specificata. L'effetto continua fino alla fine del file di origine o alla rilevazione di un pragma function che specifica la stessa funzione intrinseca. Il pragma intrinsic può essere utilizzato solo all'esterno di una definizione di funzione e a livello globale.
Le seguenti funzioni hanno formati intrinseci che vengono utilizzati quando si specifica /Oi:
|
|||
|
|||
|
I programmi che utilizzano le funzioni intrinseche sono più veloci in quanto non hanno il sovraccarico delle chiamate di funzione, ma potrebbero essere di dimensioni maggiori a causa del codice aggiuntivo generato.
Sezione specifico x86
Le funzioni intrinseche _disable e _enable generano istruzioni in modalità kernel per la disabilitare/abilitare gli interrupt e possono essere utili in driver in modalità kernel.
Esempio
Compilare il codice seguente dalla riga di comando con "cl -c -FAs sample.c" ed esaminare il file sample.asm per verificare che venga trasformano in istruzioni 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() {
}
Fine sezione specifica x86
Le funzioni a virgola mobile elencate di seguito non hanno formati intrinseci reali. Tali funzioni hanno versioni che passano argomenti direttamente al chip a virgola mobile anziché inserirli nello stack del programma:
|
Le funzioni a virgola mobile elencate di seguito hanno formati intrinseci reali quando si specifica /Oi, /Og e /fp:fast (o qualsiasi funzione che include /Og: /Ox, /O1 e /O2):
|
|
|
È possibile utilizzare l'opzione del compilatore /fp:strict o /Za per eseguire l'override della generazione di opzioni a virgola mobile intrinseche reali. 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.
Per informazioni e un esempio su come abilitare o disabilitare le funzioni intrinseche per un blocco del testo di origine, vedere funzione # pragma.