Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > В какую секцию попадают const данные?


Автор: savigm 31.8.2009, 15:35
Подскажите пожалуйста, в какую секцию попадают данные с квалификатором const и в каком виде? Насколько я понимаю данные без const идут в секцию data , а при использовании const - в rodata. При использовании квалификаторов static и const компилятор просто пишет значения в регистры в секции text, но это видимо как повезет, т.е. компилятор постарается так сделать, но может и в rodata поместить.
Собственно что мне нужно:
разместить постоянный указатель на структуру 
Код

volatile struct *const
 в секции text, но если не использовать static, то компилятор кладет данные в rodata.
На явное указание секции .text, компилятор начинает ругаться на изменение аттрибутов (флагов секций):
Код

volatile struct *const __attribute__ ((section (".text")))

Код

Warning: ignoring changed section attributes for .text

P.S. Компилатор GCC - если это имеет значение.

Автор: 500mhz 31.8.2009, 17:15
const = постоянная
компилер все правильно мутит и кладет ее в секцию с атрибутами реадонли, чтоб тебе ее менять не захотелось
при попытке сунуть ее в .техт он пытаеться там поставить РО , на что наверняка ругнеться линкер так как он захочет чтоб там не РО было а с атрибутами ЕХЕ

а какая тебе в принципе разница где что храниться?  настройки чтоль собрался там хранить? дык проще в оверлее тогда )))

Автор: savigm 31.8.2009, 17:26
500mhz, разница собственно в том что мне нужно и код и все данные запихнуть в .text, особенности компиляции так сказать. Собственно выбор у меня не большой: либо переписывать весь сишный код на ассемблер (чего очень не хотелось-бы), либо найти способ запихнуть данные в .text с помощью __attribute__ ((section (".text"))), но при этом мне нужно избавиться от предупреждения. Изменение флагов компиляции не подходит. Существует-ли способ при задании секции явно изменить аттрибуты данных в секции, т.е. типа приведения типов, только приведение флагов секций, чтобы компилятор не ругался?

Автор: 500mhz 31.8.2009, 17:31
сушествует РеEditor в котором любой секции какие угодно можно атрибуты выставить (или не РЕ еслу е тебя ELF)))

в GCC не знаю как менять атриб секции я им не пользуюсь

Автор: smoke_man 1.9.2009, 00:00
При использовании section данные должны иметь первоначальное значение. Может быть еще в этом проблема?

Автор: savigm 1.9.2009, 12:54
smoke_man, нет, начальные значения присваиваются.
Очевидно единственный способ в Си запихнуть данные в секцию .text - это использование
Код

__attribute__ ((section (".text")))
, но при этом возникнет предупреждение
Код

Warning: ignoring changed section attributes for .text
, что означает изменение аттрибутов данных (в случае квалификатора const) с чтения, на чтение и выполнение, а избавиться от этого предупреждения не получиться.

Автор: 500mhz 1.9.2009, 19:51
хз даже в OpenWatcom есть умная опция пихания всего в одну секцию

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)