The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"gcc и константные переменные"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"gcc и константные переменные"
Сообщение от KS emailИскать по авторуВ закладки on 04-Апр-02, 21:08  (MSK)
Существует ли возможность заставить gcc класть данные (например, строки) в секцию данных (.data), а не в кодовую .text?
В программе хочется использовать некоторый статический массив из строк, который не изменяется в 99% случаях. Но все-таки иногда требуется его изменить. gcc кладет его в кодовую секцию, которая имеет атрибуты `code' и `read'. Соответсвенно при попытке изменения этого массива, т.е. записи в секцию, программа падает: segmentation fault. Проштудировал весь мануал, но ничего не нашел. Как поместить этот массив в секцию для которой установлен атрибут записи?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: gcc и константные переменные"
Сообщение от Арлекин Искать по авторуВ закладки on 05-Апр-02, 08:03  (MSK)
В 8-й солярке гнутый ман содержит такой текст:
...
     -fwritable-strings
          Store string constants in the writable data segment and
          don't  uniquize  them.   This is for compatibility with
          old programs which assume they can  write  into  string
          constants.  `-traditional' also has this effect.

          Writing into string constants is a very bad idea; "con-
          stants" should be constant.
....
Может это то ? СПАРКовский компилер для этого имеет опцию -xMerge.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: gcc и константные переменные"
Сообщение от KS emailИскать по авторуВ закладки on 05-Апр-02, 09:09  (MSK)
Большое спасибо. Мой gcc-шный мануал вообще не содержит упоминаний о таком флаге, поэтому я и тормозил. Главное сам компилер поддреживает :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: gcc и константные переменные"
Сообщение от Sergey Vlasov Искать по авторуВ закладки on 12-Апр-02, 20:01  (MSK)
1) надо читать info gcc, а не man gcc - ну не любят GNUсные программеры man :-)

2) -fwritable-strings - это костыль (если не сказать хуже) для поддержки старых программ - и только для этого. Вместо него используйте:

char str[] = "some string";

там, где нужно инициализировать str, но потом в него писать.

Т.е. char *str = "xx" - инициализирует указатель str указателем на _константную_ строку - писать туда нельзя (и правильнее в данном случае писать const char *str = "xx"). char str[] = "xx" - инициализирует _массив_ str, в который потом можно писать.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру