Freigeben über


intrinsic pragma

Gibt an, dass Aufrufe von Funktionen, die in der pragmaArgumentliste angegeben sind, systemintern sind.

Syntax

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

Hinweise

Der intrinsicpragma Compiler teilt dem Compiler mit, dass eine Funktion bekanntes Verhalten aufweist. Der Compiler kann die Funktion aufrufen und den Funktionsaufruf nicht durch Inlineanweisungen ersetzen, wenn dies zu einer besseren Leistung führt.

Die Bibliotheksfunktionen mit systeminternen Formularen werden nachfolgend aufgeführt. Sobald eine intrinsicpragma Anzeige erfolgt, wird sie bei der ersten Funktionsdefinition wirksam, die eine angegebene systeminterne Funktion enthält. Der Effekt wird bis zum Ende der Quelldatei oder zum Erscheinungsbild einer functionpragma Angabe derselben systeminternen Funktion fortgesetzt. Dies intrinsicpragma kann nur außerhalb einer Funktionsdefinition auf globaler Ebene verwendet werden.

Die folgenden Funktionen weisen systeminterne Formulare auf, und die systeminternen Formulare werden verwendet, wenn Sie folgendes angeben /Oi:

Programme, die systeminterne Funktionen verwenden, sind schneller, da sie keinen Mehraufwand für Funktionsaufrufe haben. Sie können jedoch aufgrund des generierten zusätzlichen Codes größer sein.

x86-spezifisches Beispiel

Die _disable systeminternen _enable Generieren von Kernelmodusanweisungen zum Deaktivieren oder Aktivieren von Unterbrechungen und können bei Kernelmodustreibern hilfreich sein.

Kompilieren Sie den folgenden Code aus der Befehlszeile, cl -c -FAs sample.c und sehen Sie sich an sample.asm , dass sie sich in x86-Anweisungen CLI und STI umwandeln:

// 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() {
}

Systeminterne Gleitkommafunktionen

Diese Gleitkommafunktionen weisen keine echten systeminternen Formen auf. Stattdessen verfügen sie über Versionen, die Argumente direkt an den Gleitkommachip übergeben, anstatt sie auf den Stapel zu verschieben:

Diese Gleitkommafunktionen weisen echte systeminterne Formen auf, wenn Sie angeben /Oi und /fp:fast (oder eine beliebige Option, die Folgendes enthält /Oi: /Ox, /O1und /O2):

Sie können die Generierung von echten systeminternen Gleitkommaoptionen verwenden /fp:strict oder /Za außer Kraft setzen. In diesem Fall werden die Funktionen als Bibliotheksroutinen erzeugt, die Argumente direkt an den Gleitkommachip übergeben, statt sie auf dem Programmstapel abzulegen.

Informationen und ein Beispiel zum Aktivieren und Deaktivieren systeminterner Elemente für einen Quelltextblock finden Sie #pragma function unter .

Siehe auch

PragmaDirektiven und Schlüsselwörter __pragma _Pragma
Intrinsische Compilerfunktionen