const_seg pragma

Especifica la sección (segmento) en la que las variables const se almacenan en el archivo de objeto (.obj).

Sintaxis

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

Parámetros

push
(Opcional) Inserta un registro en la pila interna del compilador. Un parámetro push puede tener un valor identifier y section-name.

pop
(Opcional) Quita un registro de la parte superior de la pila interna del compilador. Un parámetro pop puede tener un valor identifier y section-name. Puede sacar varios registros con un solo comando pop mediante el valor identifier. section-name se convierte en el nombre de sección const activo después de la extracción.

identifier
(Opcional) Cuando se usa con push, asigna un nombre al registro en la pila interna del compilador. Cuando se usa con pop, la directiva saca los registros de la pila interna hasta que se quita identifier. Si no se encuentra identifier en la pila interna, no se saca nada.

"section-name"
(Opcional) Nombre de una sección. Cuando se usa con pop, se saca la pila y section-name se convierte en el nombre de sección const activo.

"section-class"
(Opcional) Se omite, pero se incluye por compatibilidad con las versiones de Microsoft C++ anteriores a la versión 2.0.

Comentarios

Una sección de un archivo objeto es un bloque de datos con nombre que se carga en memoria como una unidad. Una sección const es una sección que contiene datos constantes. En este artículo, los términos segmento y sección tienen el mismo significado.

La directiva pragmaconst_seg indica al compilador que coloque todos los elementos de datos constantes de la unidad de traducción en una sección const denominada section-name. La sección predeterminada del archivo objeto para la variable const es .rdata. Algunas variables const, como las escalares, se alinean automáticamente en la secuencia de código. El código insertado no aparece en .rdata. Una directiva pragmaconst_seg sin un parámetro section-name restablece el nombre de la sección para los elementos de datos const posteriores en .rdata.

Si define un objeto que requiere inicialización dinámica en un elemento const_seg, el resultado es un comportamiento indefinido.

Para obtener una lista de los nombres que no se deben usar a fin de crear una sección, consulte /SECTION.

También puede especificar secciones para los datos inicializados (data_seg), los datos en los que se ha anulado la inicialización (bss_seg) y las funciones (code_seg).

Se puede usar la aplicación DUMPBIN.EXE para ver archivos objeto. Las versiones de DUMPBIN para cada arquitectura de destino admitida se incluyen con Visual Studio.

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;
}
test1
test2
test3
test4

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma