|
Снова про const, не получается переползти с С на СРР |
|
|
|
Jan 10 2011, 06:05
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Искал свою проблему в форуме, но не нашел решения. Проблема в следующем. Имеется готовый проект на С для IAR-430A, кристаллы ARM ST91х. Использую структуры, состоящие из данных-констант вида: Код typedef struct{ const Tsome_type some_data1; const Tsome_type some_data2; // ...etc } Tsome_info; Затем в коде на С создаю эти структуры с уже конкретными константами в полях Код const Tsome_info info1={,,,,,}; const Tsome_info info2={,,,,,}; const Tsome_info info3={,,,,,}; //..etc На С все прекрасно живет, компилятор помещает мои структуры в сегмент CONST, а линкер- в ROM. Но, тот же самый код на СPP приводит к размещению структур в сегменте CSTACK вместе с другими объектами. В результате куча констант хранится в RAM, которой и так мало! Я в шоке.  Можно ли как-то победить эту проблему? Или придется перелопачивать идеологию проекта?
|
|
|
|
|
 |
Ответов
|
Jan 12 2011, 17:23
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
const_cast<> цяця-ляля, но до тех пор, пока мы снимаем то, что оделось по дроге - метка (*1) ниже. А когда оно изначально было const -- метка (*2) -- имеем в полный рост UB, что как раз в embedded с флешами всякими и вылезет. На PC шара прокатывает. Пока не начали секции с константами селить в страницы "только для чтения" с исключениями "генерал Фаульта" при попытке записи. C++2003 7.1.5.1 The cv-qualifiers ... 4 Except that any class member declared mutable (7.1.1) can be modified, any attempt to modify a const object during its lifetime (3.8) results in undefined behavior. 5 [Example: Код const int ci = 3; // cv-qualified (initialized as required) ci = 4; // ill-formed: attempt to modify const int i = 2; // not cv-qualified const int* cip; // pointer to const int cip = &i; // OK: cv-qualified access path to unqualified *cip = 4; // ill-formed: attempt to modify through ptr to const int* ip; // cast needed to convert const int* to int* ip = const_cast<int*>(cip); // defined: *ip points to i, a non-const object (*1) *ip = 4; const int* ciq = new const int (3); // initialized as required int* iq = const_cast<int*>(ciq); // cast required *iq = 4; // undefined: modifies a const object (*2)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 13 2011, 06:54
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(ReAl @ Jan 12 2011, 23:23)  А когда оно изначально было const -- метка (*2) -- имеем в полный рост UB, что как раз в embedded с флешами всякими и вылезет. Вы же не считаете, что запихивание констант во флеш - это defined bihavior? Всё, что обсуждается в этой теме, и есть UB. Цитата(Aprox @ Jan 13 2011, 12:05)  [code]typedef struct{ int i; float f; char* s; } Tprops; [code] Тут typedef в плюсах не нужен. Цитата(dxp @ Jan 13 2011, 08:47)  Только речь о конструкциях языка, а не о хаках И у вас "конструкции языка".
--------------------
Пишите в личку.
|
|
|
|
Сообщений в этой теме
Aprox Снова про const Jan 10 2011, 06:05 Сергей Борщ QUOTE (Aprox @ Jan 10 2011, 11:05) На С в... Jan 10 2011, 06:41 sergeeff Ну и оставьте свои
Кодconst Tsome_info info1={,,,... Jan 10 2011, 06:46 Aprox Спасибо за идею! Действительно, проект можно с... Jan 10 2011, 07:55  Сергей Борщ QUOTE (Aprox @ Jan 10 2011, 12:55) Чисто ... Jan 10 2011, 08:58 sergeeff В общем случае надо явно компилятору/линкеру сообщ... Jan 10 2011, 08:05 Aprox Цитата(sergeeff @ Jan 10 2011, 14:05) В о... Jan 10 2011, 16:44  Сергей Борщ QUOTE (Aprox @ Jan 10 2011, 21:44) Вот мо... Jan 10 2011, 20:11   Aprox Спасибо огромное! Действительно, попробовал по... Jan 11 2011, 00:36    Сергей Борщ QUOTE (Aprox @ Jan 11 2011, 05:36) Действ... Jan 11 2011, 03:36     Aprox Цитата(Сергей Борщ @ Jan 11 2011, 09:36) ... Jan 11 2011, 05:55 dimka76 А если IAR посвежее взять может там что-то изменил... Jan 10 2011, 08:24 sergeeff Вы должны четко понять, что С и С++ это разные ком... Jan 10 2011, 16:58 Oldring Цитата(Aprox @ Jan 10 2011, 12:05) Я в шо... Jan 10 2011, 17:15 dxp Цитата(Oldring @ Jan 11 2011, 02:15) В пл... Jan 11 2011, 08:53  Oldring Цитата(dxp @ Jan 11 2011, 14:53) Это как ... Jan 11 2011, 09:25   Aprox А все-таки, посоветуйте новичку в "плюсах... Jan 11 2011, 16:04    sergeeff Цитата(Aprox @ Jan 11 2011, 23:04) А все-... Jan 11 2011, 17:23    AHTOXA Цитата(Aprox @ Jan 12 2011, 00:04) как в ... Jan 11 2011, 18:52     Aprox Цитата(AHTOXA @ Jan 12 2011, 00:52) Ну вы... Jan 13 2011, 06:05      AHTOXA Цитата(Aprox @ Jan 13 2011, 14:05) Мне ка... Jan 13 2011, 06:29       Aprox Цитата(AHTOXA @ Jan 13 2011, 12:29) А с ш... Jan 13 2011, 08:23        Сергей Борщ QUOTE (Aprox @ Jan 13 2011, 13:23) Я тут ... Jan 13 2011, 08:36        AHTOXA Цитата(Aprox @ Jan 13 2011, 16:23) Я про ... Jan 13 2011, 15:40         Aprox Цитата(AHTOXA @ Jan 13 2011, 21:40) Может... Jan 14 2011, 07:52          AHTOXA А как иначе?
Ну или можно скомпилировать оба вари... Jan 14 2011, 08:39           Aprox Цитата(AHTOXA @ Jan 14 2011, 11:39) А как... Jan 19 2011, 18:50            AHTOXA Цитата(Aprox @ Jan 19 2011, 23:50) По иде... Jan 19 2011, 19:44             Aprox Цитата(AHTOXA @ Jan 19 2011, 22:44) До не... Jan 19 2011, 20:37             Aprox И еще вдогонку вопрос. Как я понимаю, тот массив с... Jan 20 2011, 06:46              Сергей Борщ QUOTE (Aprox @ Jan 20 2011, 08:46) Потому... Jan 20 2011, 07:51               Aprox Цитата(Сергей Борщ @ Jan 20 2011, 10:51) ... Jan 21 2011, 07:49                jorikdima Цитата(Aprox @ Jan 21 2011, 10:49) Что эт... Jan 21 2011, 08:10                 Aprox Цитата(jorikdima @ Jan 21 2011, 11:10) Во... Jan 21 2011, 11:00                  Сергей Борщ QUOTE (Aprox @ Jan 21 2011, 13:00) но упо... Jan 21 2011, 11:09                   Aprox Цитата(Сергей Борщ @ Jan 21 2011, 14:09) ... Jan 21 2011, 12:39                  ReAl Цитата(Aprox @ Jan 21 2011, 13:00) К сожа... Jan 21 2011, 13:59                   jorikdima Цитата(ReAl @ Jan 21 2011, 16:59) Что-то ... Jan 21 2011, 14:18                   Aprox Цитата(ReAl @ Jan 21 2011, 16:59) Кодobje... Jan 21 2011, 15:12    Oldring Цитата(Aprox @ Jan 11 2011, 22:04) А все-... Jan 11 2011, 20:40   dxp Цитата(Oldring @ Jan 11 2011, 18:25) В го... Jan 12 2011, 05:12    Oldring Цитата(dxp @ Jan 12 2011, 11:12) Такие да... Jan 12 2011, 05:29    jorikdima Цитата(dxp @ Jan 12 2011, 11:12) Такие да... Jan 12 2011, 09:34     dxp Цитата(jorikdima @ Jan 12 2011, 18:34) co... Jan 13 2011, 02:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|