Teilen über


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 popder 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 popdem 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_segpragma 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_segpragma Direktive ohne Abschnittsnamenparameter setzt den Textabschnittsnamen für den nachfolgenden Objektcode auf .text.

Die code_segpragma 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_segconst_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)
Pragma-Direktiven und die __pragma und _Pragma Schlüsselwort (keyword)