const_seg
pragma
Anger det avsnitt (segment) där variabler lagras i objektet (.obj).
Syntax
#pragma const_seg(
[ "section-name" [,
"section-class" ] ] ])
#pragma const_seg(
{push
|pop
} [,
identifierare ] [,
"section-name" [,
"section-class" ] ] ])
Parametrar
push
(Valfritt) Placerar en post på den interna kompilatorstacken. En push
kan ha en identifierare och avsnittsnamn.
pop
(Valfritt) Tar bort en post överst i den interna kompilatorstacken. En pop
kan ha en identifierare och avsnittsnamn. Du kan visa flera poster med bara ett pop
kommando med hjälp av identifierare. Det avsnittsnamnet blir det aktiva const-avsnittsnamnet efter popen.
identifierare
(Valfritt) När det används med push
tilldelar du posten ett namn på den interna kompilatorstacken. När det används med pop
, dyker direktivet upp poster från den interna stacken tills identifierare tas bort. Om identifierare inte finns i den interna stacken, visas ingenting.
"section-name"
(Valfritt) Namnet på ett avsnitt. När den används med pop
poppas stacken och avsnittsnamn blir det aktiva const-avsnittsnamnet.
"section-class"
(Valfritt) Ignoreras, men ingår för kompatibilitet med versioner av Microsoft C++ tidigare än version 2.0.
Anmärkningar
Ett avsnitt i en objektfil är ett namngivet datablock som läses in i minnet som en enhet. Ett const-avsnitt är ett avsnitt som innehåller konstanta data. I den här artikeln har termerna segment och avsnitt samma innebörd.
I const_seg
pragma-direktivet uppmanas kompilatorn att placera alla konstanta dataobjekt från översättningsenheten i ett const-avsnitt med namnet avsnittsnamn. Standardavsnittet i objektfilen för const
variabler är .rdata
. Vissa const
variabler, till exempel skalärer, infogas automatiskt i kodströmmen. Infogad kod visas inte i .rdata
. Ett const_seg
pragma direktiv utan ett avsnittsnamn parameter återställer avsnittsnamnet för efterföljande const
dataobjekt till .rdata
.
Om du definierar ett objekt som kräver dynamisk initiering i en const_seg
blir resultatet odefinierat beteende.
En lista med namn som inte ska användas för att skapa ett avsnitt finns i /SECTION
.
Du kan också ange avsnitt för initierade data (data_seg
), onitialiserade data (bss_seg
) och funktioner (code_seg
).
Du kan använda DUMPBIN.EXE-programmet för att visa objektfiler. Versioner av DUMPBIN för varje målarkitektur som stöds ingår i Visual Studio.
Exempel
// 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