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 pragma const_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 pragma const_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