Поделиться через


code_seg

Определяет текстовый сегмент, в котором хранятся функции в OBJ-файле.

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

Заметки

Директива pragma code_seg не управляет размещением ни объектного кода, созданного для шаблонов с созданными экземплярами, ни неявно созданного компилятором кода, например, специальных функций-членов. Рекомендуется вместо этого использовать атрибут __declspec (code_seg (...)), поскольку он предоставляет возможность управления размещением всего объектного кода. Сюда включается созданный компилятором код.

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

Директива pragma code_seg заставляет компилятор поместить весь последующий объектный код из блока трансляции в сегмент текста с именем segment-name. По умолчанию для функций в obj-файле используется сегмент с именем .text.

Директива pragma code_seg без параметров сбрасывает имя сегмента текста для последующего объектного кода на значение .text.

  • Push (необязательно)
    Помещает запись во внутренний стек компилятора. push может иметь identifier и segment-name.

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

  • identifier (необязательно)
    При использовании с директивой push присваивает имя записи во внутреннем стеке компилятора. При использовании с директивой pop записи из внутреннего стека извлекаются до тех пор, пока не будет удален идентификатор identifier; если идентификатор identifier во внутреннем стеке не найден, ничего не извлекается.

    identifier позволяет при помощи одной команды pop вывести сразу несколько записей.

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

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

Можно использовать приложение DUMPBIN.EXE для просмотра obj-файлов. Версии DUMPBIN для каждой поддерживаемой целевой архитектуры входят в состав Visual Studio.

Пример

В этом примере показано, как использовать директиву pragma code_seg для определения места размещения объектного кода:

// pragma_directive_code_seg.cpp
void func1() {                  // stored in .text
}

#pragma code_seg(".my_data1")
void func2() {                  // stored in my_data1
}

#pragma code_seg(push, r1, ".my_data2")
void func3() {                  // stored in my_data2
}

#pragma code_seg(pop, r1)      // stored in my_data1
void func4() {
}

int main() {
}

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

Можно также указать разделы для инициализированных данных (data_seg), неинициализированных данных (bss_seg) и переменных const (const_seg).

См. также

Ссылки

code_seg (__declspec)

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