Какая польза от раздела кода прагмы и раздела данных?

Что именно произойдет с сегментом данных и текстовым сегментом, если я использую следующие две строки в моем файле исходного кода c?

#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")

person rashok    schedule 15.03.2012    source источник
comment
Какой компилятор вы используете?   -  person Lundin    schedule 15.03.2012


Ответы (2)


Источник (содержит примеры): https://web.archive.org/web/20080803190119/http://hi.baidu.com/jevidyang/blog/item/6d4dc436d87e3a300b55a918.html

Примечание. #pragma зависит от компилятора, поэтому синтаксис может отличаться для вашего компилятора.

Прагма DATA_SECTION выделяет место для символа в разделе с именем раздела. Синтаксис прагмы в C может быть таким:

#pragma DATA_SECTION (symbol, "section name");

Синтаксис прагмы в C++ может быть таким:

#pragma DATA_SECTION ("section name");

Прагма DATA_SECTION полезна, если у вас есть объекты данных, которые вы хотите связать с областью, отдельной от раздела .bss.


Прагма CODE_SECTION выделяет место для функции в разделе с именем раздела. Прагма CODE_SECTION полезна, если у вас есть объекты кода, которые вы хотите связать с областью, отдельной от раздела .text. Синтаксис прагмы в C может быть таким:

#pragma CODE_SECTION (func, "section name")

Синтаксис прагмы в C++ может быть таким:

#pragma CODE_SECTION ("section name")
person user247702    schedule 15.03.2012
comment
Нет такой вещи, как синтаксис для этого в C/C++...! DATA_SECTION и CODE_SECTION полностью зависят от компилятора и вообще не поддерживаются никаким стандартом. Что произойдет, зависит от компилятора. Я знаю несколько компиляторов, поддерживающих CODE_SECTION и DATA_SECTION, но с совершенно другим синтаксисом. - person Lundin; 15.03.2012
comment
Если я изменю есть на может быть, вы уберете минус? Конечно, #pragma зависит от компилятора. - person user247702; 15.03.2012
comment
Да, я полагаю, что это лучше. Важно никого не обманывать, заставляя думать, что это четко определено каким-то стандартом. Хотя, конечно, исходный вопрос отсутствует, так как не было упомянуто конкретного компилятора. - person Lundin; 15.03.2012

#pragma означает, что «здесь следует что-то, определяемое реализацией, уникальное для этого компилятора». То, что произойдет, зависит от используемого вами компилятора. Если компилятор не поддерживает эту конкретную прагму, все это будет проигнорировано.


Однако в данном случае это достаточно очевидно.

#pragma CODE_SECTION(func1, "Sec1") означает: "func1 должна находиться в памяти программы, в области памяти с именем Sec1". Sec1 будет ячейкой памяти только для чтения, где будет размещен фактический код func1.

#pragma DATA_SECTION(globalvar1, "Sec2") означает: "globalvar1 должен находиться в памяти данных, в области памяти с именем Sec2". Sec2 будет местом чтения/записи, где будет размещена переменная globalvar1.

person Lundin    schedule 15.03.2012
comment
Является ли #pragama CODE_SECTION таким же, как #pragma code_seg, который поддерживается в vc. msdn.microsoft.com/en-us/library /s20kdbse(v=vs.71).aspx - person rashok; 15.03.2012
comment
@rajaashok Это был вопрос или утверждение? Любая реальная причина для понижения голоса, или вам просто так захотелось? - person Lundin; 15.03.2012