Teilen über


const_seg pragma

Gibt den Abschnitt (Segment) an, in dem Const-Variablen in der Objektdatei (.obj) gespeichert werden.

Syntax

#pragma const_seg( [ "Section-name" [ , "section-class" ] )
#pragma const_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 aktiven Abschnittsnamen.

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 aktiven Abschnittsnamen.

"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 Konstabschnitt ist ein Abschnitt , der Konstantendaten enthält. In diesem Artikel haben die Begriffe Segment und Abschnitt dieselbe Bedeutung.

Die const_segpragma Direktive weist den Compiler an, alle konstanten Datenelemente aus der Übersetzungseinheit in einen Abschnitt namens "Abschnittsname" zu setzen. Der Standardabschnitt in der Objektdatei für const Variablen lautet .rdata. Einige const-Variablen, z. B. Skalare, sind automatisch im Codestream enthalten. Inlineierter Code wird nicht angezeigt in .rdata. Eine const_segpragma Direktive ohne Abschnittsnamenparameter setzt den Abschnittsnamen für die nachfolgenden const Datenelemente auf .rdata.

Wenn Sie ein Objekt definieren, das eine dynamische Initialisierung in einem const_segObjekt erfordert, ist das Ergebnis nicht definiert.

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 Funktionen (bss_segcode_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

// pragma_directive_const_seg.cpp
// compile with: /EHsc
#include <iostream>

const int i = 7;               // inlined, not stored in .rdata
const char sz1[]= "test1";     // stored in .rdata

#pragma const_seg(".my_data1")
const char sz2[]= "test2";     // stored in .my_data1

#pragma const_seg(push, stack1, ".my_data2")
const char sz3[]= "test3";     // stored in .my_data2

#pragma const_seg(pop, stack1) // pop stack1 from stack
const char sz4[]= "test4";     // stored in .my_data1

int main() {
    using namespace std;
   // const data must be referenced to be put in .obj
   cout << sz1 << endl;
   cout << sz2 << endl;
   cout << sz3 << endl;
   cout << sz4 << endl;
}
test1
test2
test3
test4

Siehe auch

Pragma-Direktiven und die __pragma und _Pragma Schlüsselwort (keyword)