Partilhar via


const_seg pragma

Especifica a seção (segmento) em que variáveis const são armazenadas no arquivo objeto (.obj).

Sintaxe

#pragma const_seg( [ "section-name" [ , "section-class" ] ] )
#pragma const_seg(pushpop | { } [ , identificador ] [ , "nome da seção" [ , "classe da seção" ] ])

Parâmetros

push
(Opcional) Coloca um registro na pilha interna do compilador. Um push pode ter um identificador e um section-name.

pop
(Opcional) Remove um registro da parte superior da pilha interna do compilador. Um pop pode ter um identificador e um section-name. Você pode exibir vários registros usando apenas um comando pop com o identificador. O section-name se torna o nome da seção ativo const após o pop.

identificador
(Opcional) Quando usado com push, atribui um nome ao registro na pilha interna do compilador. Quando usado com pop, a diretiva remove registros da pilha interna até que o identificador seja removido. Se o identificador não for encontrado na pilha interna, nada será exibido.

"section-name"
(Opcional) O nome de uma seção. Quando usada com pop, a pilha é exibida e section-name se torna o nome ativo da seção const.

"section-class"
(Opcional) Ignorado, mas incluído para compatibilidade com versões do Microsoft C++ anteriores à versão 2.0.

Comentários

Uma seção em um arquivo-objeto é um bloco de dados nomeado carregado na memória como uma unidade. Uma seção const é uma seção que contém dados constantes. Neste artigo, os termos segmento e seção têm o mesmo significado.

A diretiva const_segpragma informa ao compilador para colocar todos os itens de dados constantes da unidade de tradução em uma seção const chamada section-name. A seção padrão no arquivo de objeto para variáveis const é .rdata. Algumas variáveis const, como escalares, são embutidas automaticamente no fluxo de código. O código embutido não aparece em .rdata. Uma diretiva const_segpragma sem um parâmetro section-name redefine o nome da seção para os itens de dados subsequentesconst como .rdata.

Se você definir um objeto que requer inicialização dinâmica em um const_seg, o resultado será um comportamento indefinido.

Para uma lista de nomes que não devem ser usados para criar uma seção, confira /SECTION.

Você também pode especificar seções para dados inicializados (data_seg), dados não inicializados (bss_seg) e funções (code_seg).

Você pode usar o aplicativo DUMPBIN.EXE para exibir arquivos-objeto. As versões de DUMPBIN para cada arquitetura de destino com suporte estão incluídas no Visual Studio.

Exemplo

// 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

Confira também

Pragmadiretivas e as __pragma palavras-chave e _Pragma