const_seg pragma

Указывает раздел (сегмент), где переменные констант хранятся в файле объекта (OBJ).

Синтаксис

#pragma const_seg([ "section-name" [ , "section-class" ])
#pragma const_seg({ } pushpop | [ ,идентификатор ] [ , "section-name" [ , "section-class" ])

Параметры

push
(Необязательно) Помещает запись во внутренний стек компилятора. Может push иметь идентификатор и имя раздела.

pop
(Необязательно) Удаляет запись из верхней части внутреннего стека компилятора. Может pop иметь идентификатор и имя раздела. Вы можете отображать несколько записей, используя только одну pop команду с помощью идентификатора. Имя раздела становится активным именем раздела констант после всплывающего окна.

идентификатор
(Необязательно) При использовании с pushименем назначается запись во внутреннем стеке компилятора. При использовании с popдирективой появляется запись из внутреннего стека, пока не будет удален идентификатор . Если идентификатор не найден во внутреннем стеке, ничего не отображается.

"section-name"
(Необязательно) Имя раздела. При использовании стека popотображается, а имя раздела становится активным именем раздела констант.

"section-class"
(Необязательно) Игнорируется, но включена для совместимости с версиями Microsoft C++ более ранней версии 2.0.

Замечания

Раздел в файле объекта — это именованный блок данных, загруженных в память в виде единицы. Раздел const — это раздел , содержащий константные данные. В этой статье сегмент терминов и раздел имеют то же значение.

Директива const_segpragma сообщает компилятору, чтобы поместить все элементы константных данных из единицы перевода в раздел const с именем section-name. Раздел по умолчанию в файле объектов для const переменных .rdata. Некоторые переменные const, например скаляры, автоматически подставляются в поток кода. Встроенный код не отображается в .rdata. Директива const_segpragma без параметра section-name сбрасывает имя раздела для последующих const элементов .rdataданных.

Если вы определяете объект, требующий динамической инициализации в объекте const_seg, результат не определен.

Список имен, которые не должны использоваться для создания раздела, см. в разделе /SECTION.

Можно также указать разделы для инициализированных данных (), неинициализированных данных (data_segbss_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 ключевое слово