const_seg
pragma
Hiermee geeft u de sectie (segment) waarin const variabelen worden opgeslagen in het objectbestand (.obj).
Syntaxis
#pragma const_seg(
[ "sectienaam" [,
"sectieklasse" ] ])
#pragma const_seg(
{push
|pop
} [,
id ] [,
"sectienaam" [,
"sectieklasse" ] ])
Parameters
push
(Optioneel) Plaatst een record op de interne compilerstack. Een push
kan een id en sectienaamhebben.
pop
(Optioneel) Hiermee verwijdert u een record boven aan de interne compilerstack. Een pop
kan een id en sectienaamhebben. U kunt meerdere records weergeven met slechts één pop
opdracht met behulp van de id. De sectienaam wordt de naam van de actieve const-sectie na de pop.
id-
(Optioneel) Wanneer deze wordt gebruikt met push
, wijst u een naam toe aan de record op de interne compilerstack. Wanneer deze wordt gebruikt met pop
, worden records van de interne stack weergegeven totdat id wordt verwijderd. Als id niet wordt gevonden op de interne stack, wordt er niets weergegeven.
"sectienaam"
(Optioneel) De naam van een sectie. Wanneer de stack wordt gebruikt met pop
, wordt de stack gepopt en sectienaam de actieve naam van de const-sectie wordt.
"sectieklasse"
(Optioneel) Genegeerd, maar opgenomen voor compatibiliteit met versies van Microsoft C++ ouder dan versie 2.0.
Opmerkingen
Een sectie in een objectbestand is een benoemd blok met gegevens dat als eenheid in het geheugen wordt geladen. Een const- is een sectie die constante gegevens bevat. In dit artikel hebben de termen segment en sectie dezelfde betekenis.
De const_seg
pragma-instructie vertelt de compiler dat alle constante gegevensitems uit de vertaaleenheid in een const-sectie met de naam sectienaamworden geplaatst. De standaardsectie in het objectbestand voor const
variabelen is .rdata
. Sommige const
variabelen, zoals scalaire waarden, worden automatisch in de codestroom geplaatst. Inlinecode wordt niet weergegeven in .rdata
. Met een const_seg
pragma instructie zonder een sectienaam parameter wordt de sectienaam voor de volgende const
gegevensitems opnieuw ingesteld op .rdata
.
Als u een object definieert waarvoor dynamische initialisatie in een const_seg
is vereist, is het resultaat niet-gedefinieerd gedrag.
Zie /SECTION
voor een lijst met namen die niet mogen worden gebruikt om een sectie te maken.
U kunt ook secties opgeven voor geïnitialiseerde gegevens (data_seg
), niet-geïnitialiseerde gegevens (bss_seg
) en functies (code_seg
).
U kunt de DUMPBIN.EXE-toepassing gebruiken om objectbestanden weer te geven. Versies van DUMPBIN voor elke ondersteunde doelarchitectuur zijn opgenomen in Visual Studio.
Voorbeeld
// 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