intrinsic
spécifie que les appels aux fonctions spécifiées dans la liste d'arguments du pragma sont intrinsèques.
#pragma intrinsic( function1 [, function2, ...] )
Notes
Le pragma d' intrinsèque indique au compilateur qu'une fonction a un comportement connu.Le compilateur peut appeler la fonction et ne pas remplacer l'appel de fonction avec l'instruction intégrée, si cela provoquera des performances.
Les fonctions de bibliothèque avec les formes intrinsèques sont répertoriées ci-dessous.Une fois qu'un pragma d' intrinsèque est vu, il soit appliqué à la première définition de fonction contenant une fonction intrinsèque spécifiée.L'effet continue à la fin de le fichier source ou à l'apparence d'un pragma de fonction spécifiant la même fonction intrinsèque.Le pragma d' intrinsèque peut être utilisé uniquement en dehors d'une définition de fonction - au niveau global.
Les fonctions suivantes présentent les formes intrinsèques et les formes intrinsèques sont utilisés lorsque vous spécifiez /Oi:
|
|||
|
|||
|
Programme les fonctions intrinsèques d'application sont plus rapides car elles n'ont pas la charge mémoire des appels de fonction mais peuvent être plus importantes en raison de code supplémentaire généré.
Spécifique x86
Les intrinsèques _disable et _enable génèrent une instruction en mode noyau de désactiver/activer les interruptions et peuvent être utiles dans les pilotes en mode noyau.
Exemple
Compilez le code suivant à partir de la ligne de commande de « CL - c - FLB sample.c » et examinez sample.asm pour voir qu'ils transforment en x86 l'instruction 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() {
}
Détail x86 de fin
Les fonctions à virgule flottante répertoriées ci-dessous n'ont pas de véritables formes intrinsèques.À la place ils ont des versions qui passent des arguments directement au processeur à virgule flottante plutôt que les poussant sur la pile du programme :
|
Les fonctions de virgule flottante répertoriées ci-dessous sont dotés de véritables formes intrinsèques lorsque vous spécifiez /Oi, /Og, et /fp : rapide (ou toute autre option qui inclut /Og : /Ox, /O1, et /O2) :
|
|
|
Vous pouvez utiliser /fp : strict ou /Za pour remplacer la build de véritables options à virgule flottante intrinsèques.Dans ce cas, les fonctions sont générées en tant que routines de bibliothèque qui passent des arguments directement au processeur en virgule flottante au lieu d'y exécuter un push sur la pile du programme.
Consultez # fonction pragma pour plus d'informations et un exemple sur la façon d'activer/désactiver des intrinsèques pour un bloc de texte source.