const_seg
pragma
Указывает раздел (сегмент), где переменные констант хранятся в файле объекта (.obj).
Синтаксис
#pragma const_seg(
[ "section-name" [ ",
section-class" ])
#pragma const_seg(
{ }push
|pop
[,
идентификатор ] [,
"section-name" [ ",
section-class" ])
Параметры
push
(Необязательно) Помещает запись во внутренний стек компилятора. Может push
иметь идентификатор и имя раздела.
pop
(Необязательно) Удаляет запись из верхней части внутреннего стека компилятора. Может pop
иметь идентификатор и имя раздела. Вы можете отображать несколько записей, используя только одну pop
команду с помощью идентификатора. Имя раздела становится активным именем раздела констант после всплывающего окна.
идентификатор
(Необязательно) При использовании с push
именем назначается запись во внутреннем стеке компилятора. При использовании с pop
директивой появляется запись из внутреннего стека, пока не будет удален идентификатор . Если идентификатор не найден во внутреннем стеке, ничего не отображается.
"section-name"
(Необязательно) Имя раздела. При использовании стека pop
отображается, а имя раздела становится активным именем раздела констант.
"section-class"
(Необязательно) Игнорируется, но включена для совместимости с версиями Microsoft C++ более ранней версии 2.0.
Замечания
Раздел в файле объекта — это именованный блок данных, загруженных в память в виде единицы. Раздел const — это раздел , содержащий константные данные. В этой статье сегмент терминов и раздел имеют то же значение.
Директива const_seg
pragma сообщает компилятору, чтобы поместить все элементы константных данных из единицы перевода в раздел const с именем section-name. Раздел по умолчанию в файле объектов для const
переменных .rdata
. Некоторые переменные const
, например скаляры, автоматически подставляются в поток кода. Встроенный код не отображается в .rdata
. Директива const_seg
pragma без параметра section-name сбрасывает имя раздела для последующих const
элементов .rdata
данных.
Если вы определяете объект, требующий динамической инициализации в объекте const_seg
, результат не определен.
Список имен, которые не должны использоваться для создания раздела, см. в разделе /SECTION
.
Можно также указать разделы для инициализированных данных (), неинициализированных данных (data_seg
bss_seg
) и функций (code_seg
).
Приложение DUMPBIN.EXE можно использовать для просмотра файлов объектов. Версии DUMPBIN для каждой поддерживаемой целевой архитектуры включены в Visual Studio.
Пример
// 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
См. также
директивы Pragma и ключевые слова __pragma
и _Pragma