const_seg pragma

Specifica la sezione (segmento) in cui le variabili const vengono archiviate nel file dell'oggetto (.obj).

Sintassi

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

Parametri

push
(Facoltativo) Inserisce un record nello stack interno del compilatore. Un push oggetto può avere un identificatore e un nome di sezione.

pop
(Facoltativo) Rimuove un record dalla parte superiore dello stack del compilatore interno. Un pop oggetto può avere un identificatore e un nome di sezione. È possibile visualizzare più record usando un pop solo comando usando l'identificatore . Il nome della sezione diventa il nome della sezione const attivo dopo il pop.

identificatore
(Facoltativo) Se usato con push, assegna un nome al record nello stack del compilatore interno. Se usata con pop, la direttiva rimuove i record dallo stack interno fino a quando non viene rimosso l'identificatore . Se l'identificatore non viene trovato nello stack interno, non viene visualizzato nulla.

"section-name"
(Facoltativo) Nome di una sezione. Se usato con pop, lo stack viene estratto e il nome della sezione diventa il nome della sezione const attivo.

"section-class"
(Facoltativo) Ignorato, ma incluso per la compatibilità con le versioni di Microsoft C++ precedenti alla versione 2.0.

Osservazioni:

Una sezione di un file oggetto è un blocco denominato di dati caricati in memoria come unità. Una sezione const è una sezione che contiene dati costanti. In questo articolo i termini segmento e sezione hanno lo stesso significato.

La const_segpragma direttiva indica al compilatore di inserire tutti gli elementi di dati costanti dall'unità di conversione in una sezione const denominata section-name. La sezione predefinita nel file oggetto per const le variabili è .rdata. Alcune variabili const, come le variabili scalari, vengono automaticamente inserite nel flusso di codice. Il codice inlined non viene visualizzato in .rdata. Una const_segpragma direttiva senza un parametro section-name reimposta il nome della sezione per gli elementi di dati successivi const su .rdata.

Se si definisce un oggetto che richiede l'inizializzazione dinamica in un const_segoggetto , il risultato non è definito.

Per un elenco di nomi che non devono essere usati per creare una sezione, vedere /SECTION.

È anche possibile specificare sezioni per i dati inizializzati (data_seg), i dati non inizializzati (bss_seg) e le funzioni (code_seg).

È possibile usare l'applicazione DUMPBIN.EXE per visualizzare i file oggetto. Le versioni di DUMPBIN per ogni architettura di destinazione supportata sono incluse in Visual Studio.

Esempio

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

Vedi anche

Direttive Pragma e parole __pragma chiave e _Pragma