const_seg
Especifica o segmento em que as variáveis const são armazenadas no arquivo .obj.
#pragma const_seg ( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
Comentários
O significado dos termos segmento e seção são usados alternadamente neste tópico.
Os arquivos OBJ podem ser exibidos com o aplicativo dumpbin. O segmento padrão no arquivo. obj para const variáveis é RDATA. Alguns const como escalares, as variáveis são embutidas automaticamente no fluxo de código. O código embutido não aparecerá em .rdata.
Definindo um objeto que exigem a inicialização dinâmica em uma const_seg resulta em um comportamento indefinido.
#pragma const_segsem parâmetros redefine o segmento como RDATA.
push (opcional)
Coloca um registro na pilha interna do compilador. Um push pode ter um identifier e segment-name.pop (opcional)
Remove um registro do topo da pilha interna do compilador.identifier (opcional)
Quando usado com push, atribui um nome ao registro na pilha interna do compilador. Quando usado com pop, elimina registros da pilha interna até que identifier seja removido; se identifier não for localizado na pilha interna, nada será exibido.Usando identifier habilita vários registros a serem exibidos com um único pop comando.
"segment-name"(opcional)
O nome de um segmento. Quando usado com pop, a pilha é exibida e segment-name torna-se o nome do segmento ativo."segment-class"(opcional)
Incluído para compatibilidade com o C++ antes da versão 2.0. É ignorado.
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;
}
Comentários
Consulte /SECTION para obter uma lista de nomes que você não deve usar ou criar uma seção.
Você também pode especificar seções para dados inicializados (data_seg), dados não inicializados (bss_seg) e funções (code_seg).