Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
*nix константы в readonly памяти держит. 03.10.05 16:49 Число просмотров: 2102
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> Ну да. Я просто сказал о наиболее частом использовании. > Если оптимизатор не сможет заменить все обращения к > константе на ее значение (неизвестное на этапе компиляции), > то он просто заведет переменную (вернее он ее заведет в > любом случае, но линкер не сможет отрезать "неиспользуемый > код"). В случае x86 платформ (что *nix, что винды) никакой > readonly памяти не будет. Переменная просто попадет в > секцию данных (это если статическая или глобальная) или там > же где и все остальные (стек/куча/ручная выделялка), а все > попытки обратиться к ней на изменение будут пресекаться на > этапе компиляции.
*nix константы в readonly памяти держит.
char *ptr = "core dumped.";
*ptr = 'C';
Эта строка приведет к сегментэйшн фолт.
> Это ж какой компайлер не понимает стандарта 98-го года?
BCC V3.1 от 1992 года и SC V7.2 от 1995 года.
Первый можно кастрировать до необычайно маленьких размеров так чтоб такать с собой буквально на дискетке. Второй правильно работает с памятью.
> Семь лет прошло как никак - было время привести в > соответсвтие так сказать (и это не export, который так до > сих пор никем толком и не поддерживается, ибо не совсем > понятно как сделать его реализацию)
> Да, кстати, если компилятор таки не понимает стандарта > 98-го года, то можно использовать const_cast (из того же > стандарта, если он хотя бы частично реализован) ну или > c-style cast (обычные скобки) для отрезания константности > из типа. Некошерно, зато работать будет и компиляться без > ворнингов.
Попробую.
|
|
|