Intrinsische Compilerfunktionen
Die meisten Funktionen sind in Bibliotheken enthalten, aber einige Funktionen sind in den Compiler integriert (das heißt, sie sind systemintern). Diese werden als intrinsische Funktionen bezeichnet.
Hinweise
Wenn eine Funktion systemintern ist, wird der Code für diese Funktion normalerweise inline eingefügt, damit wird der Mehraufwand eines Funktionsaufrufs vermieden und es können äußerst effiziente Computerbefehle für diese Funktion ausgegeben werden. Eine systeminterne Funktion ist häufig schneller als die entsprechende Inlineassembly, da der Optimierer über integriertes Wissen über das Verhalten vieler systeminterner Funktionen verfügt, sodass einige Optimierungen verfügbar sein können, die bei Verwendung von Inlineassemblys nicht verfügbar sind. Außerdem kann der Optimierer die systeminterne Funktion anders erweitern, Puffer anders ausrichten oder je nach Kontext und den Argumenten des Aufrufs andere Anpassungen vornehmen.
Die Verwendung systeminterner Funktionen beeinflusst die Portabilität des Codes, da die in Visual C++ verfügbaren systeminternen Funktionen möglicherweise nicht zur Verfügung stehen, wenn der Code mit anderen Compilern und einigen systeminternen Funktionen kompiliert wird, die möglicherweise für einige aber nicht für alle Zielarchitekturen verfügbar sind. Allerdings sind systeminterne Funktionen in der Regel besser portierbar als Inlineassemblys. Systeminternen Funktionen sind auf 64-Bit-Architekturen erforderlich, auf denen Inlineassemblys nicht unterstützt werden.
Einige systeminterne Funktionen, wie __assume
und __ReadWriteBarrier
, stellen dem Compiler Informationen bereit, die das Verhalten des Optimierers beeinflussen.
Einige systeminterne Funktionen sind nur als systeminterne Funktionen verfügbar, und einige sind sowohl in Funktionsimplementierungen als auch in systeminternen Implementierungen verfügbar. Sie können den Compiler anweisen, die systeminterne Implementierung auf einer von zwei Arten zu verwenden, je nach dem, ob Sie nur bestimmte Funktionen aktivieren möchten, oder ob Sie alle systeminternen Funktionen aktivieren möchten. Die erste Möglichkeit besteht darin, systeminterne Funktionsnamenliste zu verwenden#pragma intrinsic(
.)
Das Pragma kann verwendet werden, um eine einzelne systeminterne Funktion oder mehrere durch Trennzeichen getrennte systeminterne Funktionen angeben. Die zweite besteht darin, die Compileroption /Oi (Systeminterne Funktionen generieren) zu verwenden, die alle systeminternen Elemente auf einer bestimmten Plattform verfügbar macht. Verwenden Sie#pragma function(
unter "/Oi" systeminterne Funktionsnamenliste)
, um zu erzwingen, dass anstelle eines systeminternen Funktionsaufrufs ein Funktionsaufruf verwendet wird. Wenn die Dokumentation für eine bestimmte systeminterne Hinweise darauf hinweist, dass die Routine nur als systemintern verfügbar ist, wird die systeminterne Implementierung unabhängig davon verwendet, ob /Oi oder #pragma intrinsic
angegeben ist. In allen Fällen erlaubt /Oi oder #pragma intrinsic
lässt, aber nicht erzwingt, dass der Optimierer das systeminterne Verwendet. Die Funktion kann vom Optimierer noch immer aufgerufen werden.
Einige C bzw. C++-Standardbibliotheksfunktionen sind in den systeminternen Implementierungen einiger Architekturen verfügbar. Beim Aufrufen einer CRT-Funktion wird die systeminterne Implementierung verwendet, wenn /Oi in der Befehlszeile angegeben wird.
Eine Headerdatei ( <intrin.h>) ist verfügbar, die Prototypen für die gängigen systeminternen Funktionen deklariert. Herstellerspezifische systeminterne Elemente sind in den <Headerdateien immintrin.h> und <ammintrin.h> verfügbar. Außerdem deklarieren bestimmte Windows-Header Funktionen, die auf eine systeminterne Compilerfunktion zuordnen.
In den folgenden Abschnitten werden alle systeminternen Funktionen aufgeführt, die auf verschiedenen Architekturen verfügbar sind. Weitere Informationen zu der Funktionsweise systeminterner Funktionen auf dem bestimmten Zielprozessor finden Sie in der Referenzdokumentation des Herstellers.
Siehe auch
ARM-Assemblerreferenz
Microsoft Macro Assembler-Referenz
Schlüsselwörter
C-Laufzeitbibliotheksreferenz