const_seg

Указывает сегмент где Const переменные сохраняются в файле obj.

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

Заметки

Смысл терминов сегмент и раздел заменим в этом разделе.

Файлы OBJ, можно просмотреть с dumpbin приложения.По умолчанию сегмент в obj-файле, Const .rdata переменные.некоторые Const переменные, такие как скалярные, автоматически встроенным в поток Кода.Код Встроенным не появится в .rdata.

const_seg без параметров сбросит сегмент в .rdata.

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

  • шипучка (необязательно)
    Удаляет запись из вершины внутреннего стека компилятора.

  • Идентификатор (необязательно)
    при использовании с push, присвоити имя для записи во внутреннем стеке компилятора.при использовании с шипучка, шипучки не будут создавать с помощью внутреннего стека до Идентификатор удаляет; If Идентификатор не удается найти во внутреннем стеке, ничего не получаются.

    использование Идентификатор включает несколько записей, извлекаемые с одним шипучка команды.

  • «сегмент-имя»(необязательно)
    имя сегмента*.* при использовании с шипучкастек, извлекается и сегмент-имя становится имя активного сегмента.

  • «сегмент-класс» (необязательно)
    Включено для обеспечения совместимости с C++ до версии 2,0.Он не учитывается.

Пример

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

Комментарии

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

Также можно указать разделах инициализированных данных (data_segнеинициализированные данные ()bss_seg) и функций (code_seg).

См. также

Ссылки

Директивы pragma и ключевое слово __Pragma