Share via


Intrinsèques du compilateur

La plupart des fonctions sont contenues dans les bibliothèques, mais certaines fonctions sont intégrées (c'est-à-dire intrinsèque) du compilateur.Celles-ci sont appelées fonctions intrinsèques ou intrinsèques.

Notes

Si une fonction est un élément intrinsèque, le code de cette fonction est généralement insérés en ligne, en évitant la surcharge d'un appel de fonction et en autorisant des instructions machine hautement efficace être émis pour cette fonction.Un élément intrinsèque est souvent plus rapide que l'assembly inline équivalents, car l'optimiseur a une connaissance intégrée des éléments intrinsèques combien se comportent, afin que certaines optimisations peuvent être disponibles qui ne sont pas disponibles lorsque l'assembly inline est utilisé.En outre, l'optimiseur peut développer les intrinsèques différemment, aligner tampons différemment ou autres ajustements selon le contexte et les arguments de l'appel.

L'utilisation des fonctions intrinsèques affecte la portabilité du code, dans la mesure où les éléments intrinsèques disponibles dans Visual C++ ne soient pas disponibles si le code est compilé avec d'autres compilateurs et certaines fonctions intrinsèques qui pourraient être disponibles pour certaines architectures cibles ne sont pas disponibles pour toutes les architectures.Toutefois, fonctions intrinsèques sont généralement plus portables que le code assembleur inline.Les éléments intrinsèques sont requis sur les architectures 64 bits dans lequel un assembly inline n'est pas pris en charge.

Certaines fonctions intrinsèques, tels que __assume et __ReadWriteBarrier, fournissent des informations au compilateur, ce qui affecte le comportement de l'optimiseur.

Certaines formes intrinsèques ne sont disponibles uniquement en tant que fonctions intrinsèques, et certains sont disponibles en fonction et implémentations intrinsèques.Vous pouvez demander au compilateur d'utiliser la mise en oeuvre intrinsèque dans une des deux façons, selon que vous souhaitez activer des fonctions spécifiques ou que vous souhaitez activer tous les éléments intrinsèques.The first way is to use #pragma intrinsic(intrinsic-function-name-list).Le pragma peut être utilisé pour spécifier un seul intrinsèque ou plusieurs éléments intrinsèques séparés par des virgules.La seconde consiste à utiliser la /Oi (générer des fonctions intrinsèques) option du compilateur, ce qui rend tous les éléments intrinsèques sur une plate-forme donnée disponible.Sous /Oi, utilisez #pragma function(intrinsic-function-name-list) pour forcer un appel de fonction à utiliser à la place d'un élément intrinsèque.Si la documentation spécifique intrinsèque observe que la routine est uniquement disponible comme intrinsŠque, puis la mise en oeuvre intrinsèque est utilisé quel que soit ou non /Oi ou #pragma intrinsic est spécifié.Dans tous les cas, /Oi ou #pragma intrinsic permet, mais ne force pas l'optimiseur à utiliser la fonction intrinsèque.L'optimiseur peut toujours appeler la fonction.

Certaines fonctions de bibliothèque C/C++ standard sont disponibles dans les implémentations intrinsèques sur certaines architectures.Lorsque vous appelez une fonction CRT, la mise en oeuvre intrinsèque est utilisé si /Oi est spécifié sur la ligne de commande.

Vous trouverez un fichier d'en-tête intrin.h présent dans, qui déclare les prototypes pour les fonctions intrinsèques.En outre, certains en-têtes Windows déclarent des fonctions qui mappent un intrinsèque du compilateur.

Les sections suivantes répertorient tous les éléments intrinsèques qui sont disponibles sur différentes architectures.Pour plus d'informations sur la façon dont les éléments intrinsèques sur votre processeur cible particulière, reportez-vous à la documentation de référence du fabricant.

Voir aussi

Référence

Mots clés C++

Autres ressources

Référence d'assembly de ARM

Référence de Microsoft macro assembler

Référence de la bibliothèque runtime C