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 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 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_seg
pragma 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_seg
pragma 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_seg
Objekt 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_seg
code_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