code_seg
pragma
Gibt den Textabschnitt (Segment) an, in dem Funktionen in der Objektdatei (.obj) gespeichert werden.
Syntax
#pragma code_seg(
[ "Section-name" [,
"section-class" ])
#pragma code_seg(
{ }push
|pop
[,
Bezeichner ] [,
"Section-name" [,
"section-class" ])
Parameter
push
(Optional) Fügt einen Datensatz in den internen Compilerstapel ein. A push
kann einen Bezeichner und einen Abschnittsnamen aufweisen.
pop
(Optional) Entfernt einen Datensatz vom oberen Rand des internen Compilerstapels. A pop
kann einen Bezeichner und einen Abschnittsnamen aufweisen. Sie können mehrere Datensätze mit nur einem pop
Befehl mithilfe des Bezeichners auffüllen. Der Abschnittsname wird nach dem Pop zum Namen des aktiven Textabschnitts.
identifier
(Optional) Bei Verwendung mit push
, weist dem Datensatz im internen Compilerstapel einen Namen zu. Bei Verwendung mit pop
der Direktive werden Datensätze aus dem internen Stapel angezeigt, bis der Bezeichner entfernt wird. Wenn der Bezeichner im internen Stapel nicht gefunden wird, wird nichts angezeigt.
"Abschnittsname"
(Optional) Der Name eines Abschnitts. Bei Verwendung mit pop
dem Stapel wird der Stapel eingetaucht, und der Abschnittsname wird zum Namen des aktiven Textabschnitts.
"section-class"
(Optional) Ignoriert, ist jedoch aus Gründen der Kompatibilität mit Versionen von Microsoft C++ vor Version 2.0 enthalten.
Hinweise
Ein Abschnitt in einer Objektdatei ist ein benannter Datenblock, der als Einheit in den Arbeitsspeicher geladen wird. Ein Textabschnitt ist ein Abschnitt , der ausführbaren Code enthält. In diesem Artikel haben die Begriffe Segment und Abschnitt dieselbe Bedeutung.
Die code_seg
pragma Direktive weist den Compiler an, alle nachfolgenden Objektcode aus der Übersetzungseinheit in einen Textabschnitt namens "Abschnittsname" einzufügen. Standardmäßig wird der Textabschnitt, der für Funktionen in einer Objektdatei verwendet wird, benannt .text
. Eine code_seg
pragma Direktive ohne Abschnittsnamenparameter setzt den Textabschnittsnamen für den nachfolgenden Objektcode auf .text
.
Die code_seg
pragma Direktive steuert nicht die Platzierung von Objektcode, der für instanziierte Vorlagen generiert wird. Sie steuert auch nicht implizit vom Compiler generierten Code, z. B. spezielle Memberfunktionen. Um diesen Code zu steuern, empfehlen wir stattdessen die Verwendung des __declspec(code_seg(...))
Attributs. Dadurch können Sie die Platzierung aller Objektcode steuern, einschließlich compilergeneriertem Code.
Eine Liste der Namen, die nicht zum Erstellen eines Abschnitts verwendet werden sollen, finden Sie unter /SECTION
.
Sie können auch Abschnitte für initialisierte Daten (data_seg
), nicht initialisierte Daten () und Constvariablen (bss_seg
const_seg
) angeben.
Sie können die DUMPBIN.EXE-Anwendung verwenden, um Objektdateien anzuzeigen. Versionen von DUMPBIN für jede unterstützte Zielarchitektur sind in Visual Studio enthalten.
Beispiel
In diesem Beispiel wird gezeigt, wie Sie die code_seg-Direktivepragma verwenden, um zu steuern, wo Objektcode platziert wird:
// pragma_directive_code_seg.cpp
void func1() { // stored in .text
}
#pragma code_seg(".my_data1")
void func2() { // stored in my_data1
}
#pragma code_seg(push, r1, ".my_data2")
void func3() { // stored in my_data2
}
#pragma code_seg(pop, r1) // stored in my_data1
void func4() {
}
int main() {
}
Siehe auch
code_seg (__declspec)
PragmaDirektiven und Schlüsselwörter __pragma
_Pragma