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_seg
pragma 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_seg
pragma 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_seg
oggetto , 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