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 intrinsic
pragma 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 intrinsic
pragma 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 function
pragma Angabe derselben systeminternen Funktion fortgesetzt. Dies intrinsic
pragma 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
, /O1
und /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