const_seg

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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" ] )  

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.

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

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).

Directives pragma y la palabra clave __pragma

Mostrar: