intrinsic
Gibt an, dass Funktionsaufrufe, die in der Argumentliste des Pragmas angegeben sind, systemintern sind.
#pragma intrinsic( function1 [, function2, ...] )
Hinweise
Das intrinsic-Pragma informiert den Compiler, dass eine Funktion ein 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 ein intrinsic-Pragma angezeigt wird, tritt es mit der ersten Funktionsdefinition in Kraft, die eine bestimmte systeminterne Funktion enthält. Die Wirkung dauert bis zum Ende der Quelldatei oder bis zum Auftreten eines function-Pragmas an, das die gleiche systeminterne Funktion angibt. Das intrinsic-Pragma kann nur außerhalb einer Funktionsdefinition auf globaler Ebene verwendet werden.
Die folgenden Funktionen haben systeminterne Formen und die systeminternen Formen werden verwendet, wenn Sie /Oi angeben:
|
|||
|
|||
|
Programme, die systeminterne Funktionen verwenden, sind schneller, da sie nicht den Mehraufwand der Funktionsaufrufe haben, sie können aufgrund des zusätzlich erstellten Codes jedoch größer sein.
x86-spezifisch
Die systeminternen Funktionen _disable und _enable generieren Kernelmodusanweisungen, um Unterbrechungen zu deaktivieren bzw. aktivieren, und können in Kernelmodustreibern hilfreich sein.
Beispiel
Kompilieren Sie den folgenden Code in der Befehlszeile mit "cl -c -FAs sample.c", und überprüfen Sie sample.asm, um zu sehen, dass diese in x86-Anweisungen CLI und STI umgewandelt werden:
// 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() {
}
x86-spezifisch beenden
Die unten aufgeführten Gleitkommafunktionen haben keine echten systeminternen Formen. Stattdessen verfügen sie über Versionen, die Argumente direkt an den Gleitkommachip übergeben, anstatt sie auf dem Programmstapel abzulegen:
|
Die unten aufgeführten Gleitkommafunktionen haben echte systeminterne Formen, wenn Sie /Oi, /Og und /fp:fast angeben (oder eine Option, die /Og: /Ox, /O1 und /O2 enthält):
|
|
|
Sie können /fp:strict oder /Za verwenden, um die Generierung von echten systeminternen Gleitkommaoptionen zu überschreiben. In diesem Fall werden die Funktionen als Bibliotheksroutinen erzeugt, die Argumente direkt an den Gleitkommachip übergeben, statt sie auf dem Programmstapel abzulegen.
Weitere Informationen und ein Beispiel, wie systeminterne Funktionen für einen Block an Quelltext aktiviert/deaktiviert werden, finden Sie unter # pragma-Funktion.