code_seg pragma

Especifica la sección de texto (segmento) donde se almacenan las funciones en el archivo de objeto (.obj).

Sintaxis

#pragma code_seg( [ "section-name" [ , "section-class" ] ] )
#pragma code_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. El section-name se convierte en el nombre de la sección de texto activo después de sacar.

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 la sección de texto activa.

"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 de texto es una sección que contiene código ejecutable. En este artículo, los términos segmento y sección tienen el mismo significado.

La directiva code_segpragma indica al compilador que coloque todo el código objeto posterior de la unidad de traducción en una sección de texto denominada section-name. De forma predeterminada, la sección de texto usada para las funciones de un archivo objeto se denomina .text. Una directiva code_segpragma sin un parámetro section-name restablece el nombre de la sección para código de objeto posterior a .text.

La directiva code_segpragma no controla la colocación de control del código de objeto generado para las plantillas con instancias. Tampoco controla el código de control generado implícitamente por el compilador, como funciones miembro especiales. Para controlar ese código, se recomienda usar el atributo __declspec(code_seg(...)) en su lugar. Este proporciona control sobre la colocación de todo el código de objeto, incluido el código generado por el compilador.

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 variables const (const_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

En este ejemplo se muestra cómo usar la directiva code_segpragma para controlar dónde se coloca el código de objeto:

// pragma_directive_code_seg.cpp
void func1() {                  // stored in .text
}

#pragma code_seg(".my_data1")
void func2() {                  // stored in my_data1
}

#pragma code_seg(push, r1, ".my_data2")
void func3() {                  // stored in my_data2
}

#pragma code_seg(pop, r1)      // stored in my_data1
void func4() {
}

int main() {
}

Consulte también

code_seg (__declspec)
Directivas pragma y las palabras clave __pragma y _Pragma