intrinsic
pragma
Spécifie que les appels aux fonctions spécifiées dans la pragmaliste d’arguments sont intrinsèques.
Syntaxe
#pragma intrinsic(
function_1 [,
function_2 ... ])
Notes
Indique intrinsic
pragma au compilateur qu’une fonction a un comportement connu. Le compilateur peut appeler cette fonction sans remplacer l'appel de fonction par des instructions inline, si cela entraîne de meilleures performances.
Les fonctions de bibliothèque avec des formes intrinsèques sont répertoriées ci-dessous. Une fois qu’une intrinsic
pragma fonction est vue, elle prend effet à la première définition de fonction contenant une fonction intrinsèque spécifiée. L’effet continue à la fin du fichier source ou à l’apparence d’une function
pragma fonction intrinsèque spécifiant la même fonction intrinsèque. Il intrinsic
pragma ne peut être utilisé qu’en dehors d’une définition de fonction, au niveau global.
Les fonctions suivantes ont des formes intrinsèques et les formulaires intrinsèques sont utilisés lorsque vous spécifiez /Oi
:
Les programmes qui utilisent des fonctions intrinsèques sont plus rapides, car ils n’ont pas la surcharge des appels de fonction. Toutefois, elles peuvent être plus volumineuses en raison du code supplémentaire généré.
Exemple spécifique à x86
Les _disable
intrinsèques et _enable
les instructions génèrent des instructions en mode noyau pour désactiver ou activer des interruptions, et peuvent être utiles dans les pilotes en mode noyau.
Compilez le code suivant à partir de la ligne de commande et cl -c -FAs sample.c
examinez-les sample.asm
pour voir qu’ils se transforment en instructions x86 CLI et 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() {
}
Fonctions à virgule flottante intrinsèques
Ces fonctions à virgule flottante n’ont pas de véritables formes intrinsèques. Au lieu de cela, ils ont des versions qui passent directement des arguments à la puce à virgule flottante, plutôt que de les pousser sur la pile :
Ces fonctions à virgule flottante ont de véritables formes intrinsèques lorsque vous spécifiez /Oi
et /fp:fast
(ou toute option incluant /Oi
: /Ox
, /O1
et /O2
) :
Vous pouvez utiliser /fp:strict
ou /Za
remplacer la génération de véritables options à virgule flottante intrinsèque. Dans ce cas, les fonctions sont générées en tant que routines de bibliothèque qui passent directement des arguments au processeur de calcul en virgule flottante au lieu de leur appliquer une transmission de type push sur la pile du programme.
Pour #pragma function
plus d’informations, consultez un exemple sur l’activation et la désactivation des intrinsèques pour un bloc de texte source.
Voir aussi
Pragma directives et mots __pragma
_Pragma
clés
Intrinsèques du compilateur