Compartir a través de


const_seg

Especifica el segmento en el que las variables const se almacenan en el archivo .obj.

#pragma const_seg ( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )

Comentarios

Los términos segmento y sección son sinónimos en este tema.

Los archivos OBJ se pueden ver con la aplicación dumpbin. El segmento predeterminado en el archivo .obj para las variables const es .rdata. Algunas variables const, como las escalares, se alinean automáticamente en la secuencia de código. El código alineado no aparecerá en .rdata.

Definir un objeto que requiera una inicialización dinámica en un const_seg produce un comportamiento no definido.

#pragma const_seg sin parámetros restablece el segmento en .rdata.

  • push (opcional)
    Inserta un registro en la pila interna del compilador. push puede tener un parámetro identifier y un parámetro segment-name.

  • pop (opcional)
    Quita un registro de la parte superior de la pila interna del compilador.

  • identifier (opcional)
    Cuando se usa con push, asigna un nombre al registro en la pila interna del compilador. Cuando se usa con pop, extrae los registros de la pila interna hasta que se quita el identifier; si no se encuentra el identifier en la pila interna, no se extrae nada.

    Usar identifier permite sacar varios registros con un solo comando pop.

  • "segment-name" (opcional)
    Nombre de un segmento. Cuando se usa con pop, se extrae la pila y segment-name se convierte en el nombre del segmento activo.

  • "segment-class" (opcional)
    Se incluye por compatibilidad con C++ antes de la versión 2.0. Se omite.

Ejemplo

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

Comentarios

Para obtener una lista de los nombres que no debe utilizar cuando cree una sección, vea /SECTION.

También puede especificar secciones para datos inicializados (data_seg), datos sin inicializar (bss_seg) y funciones (code_seg).

Vea también

Referencia

Directives pragma y la palabra clave __pragma