Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Systeminterne Funktionen des Compilers

Die meisten Funktionen in Bibliotheken enthalten sind, aber einige Funktionen sind integriert (das heißt, systeminternen) an den Compiler. Diese werden als systeminterne Funktionen oder Spezifikationen bezeichnet.

Wenn eine Funktion eine systeminterne Funktion ist, ist der Code für diese Funktion Inline in der Regel eingefügt, und der für einen Funktionsaufruf und hocheffiziente Maschinenanweisungen für diese Funktion ermöglicht. 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 Optimierungen möglich sein können, die bei Verwendung von Inlineassemblys nicht verfügbar wären. Außerdem kann der Optimierer die systeminternen Funktionen anders erweitern, Puffer anders ausrichten oder je nach Kontext und den Argumenten des Aufrufs andere Anpassungen vornehmen.

Die Verwendung von systeminternen Funktionen betrifft die Portabilität von Code, da systeminterne Funktionen, die in Visual C++ sind möglicherweise nicht verfügbar Wenn der Code mit anderen Compilern kompiliert ist und einige systeminterne Funktionen, die möglicherweise für einige Zielarchitekturen verfügbar nicht für alle Architekturen verfügbar sind. Systeminterne Funktionen sind jedoch in der Regel besser portierbar als Inline-Assemblierung. Die systeminterne Funktionen sind auf 64-Bit-Architekturen erforderlich, in denen Inlineassembly nicht unterstützt wird.

Einige systeminterne Funktionen, wie z. B. __assume und __ReadWriteBarrier, enthalten Informationen, die der Compiler, der das Verhalten des Optimierers beeinflusst.

Einige systeminterne Funktionen sind nur als solche 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 Verwendungsart ist #pragma intrinsic(intrinsic-function-name-list) Das Pragma kann verwendet werden, um eine einzelne systeminterne Funktion oder mehrere durch Trennzeichen getrennte systeminterne Funktionen anzugeben. Die zweite Methode verwendet die /Oi (systeminterne Funktionen erstellen) -Compileroption, die alle Spezifikationen für eine bestimmte Plattform zur Verfügung stellt. Verwenden Sie unter /Oi#pragma function(intrinsic-function-name-list), um die Verwendung eines Funktionsaufrufs anstelle einer systeminternen Funktion zu erzwingen. Wenn in der Dokumentation für einer bestimmten systeminternen Funktion darauf hingewiesen wird, dass eine Routine nur als systeminterne Funktion verfügbar ist, dann wird eine systeminterne Implementierung verwendet, unabhängig davon ob /Oi oder #pragma intrinsic angegeben wird. In allen Fällen /Oi oder #pragma intrinsic erlaubt, aber wird nicht erzwungen, den Optimierer die systeminterne verwenden. Der Optimierer kann immer noch die Funktion aufrufen.

Einige Standardfunktionen der C/C++-Bibliothek sind in systeminternen Implementierungen auf manchen Architekturen verfügbar. Beim Aufrufen einer CRT-Funktion wird die integrierte Implementierung verwendet, wenn /Oi in der Befehlszeile angegeben ist.

Eine Headerdatei, "Intrin.h", die Prototypen für die systeminternen Funktionen deklariert, ist verfügbar. Außerdem deklarieren bestimmte Windows-Header Funktionen, Funktionen die auf eine systeminterne Compilerfunktion verweisen.

Den folgenden Abschnitten werden alle Spezifikationen, die auf verschiedenen Architekturen verfügbar sind. Weitere Informationen zu der Funktionsweise der systeminternen Funktionen auf einem bestimmten Zielprozessor finden Sie in der Referenzdokumentation des Herstellers.

Community-Beiträge

HINZUFÜGEN
Anzeigen: