Dela via


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 pushtilldelar 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 poppoppas 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_segpragma-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_segpragma 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_segblir 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

Se även

Pragma-direktiv och nyckelorden __pragma och _Pragma