реклама на сайте
подробности

 
 
> static const vs const, ошарашен!
ViKo
сообщение Jan 14 2015, 16:02
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Добавил к программе еще немного вывода текстовых строк, задал их в виде массива, условно:
const char *Text[] = { "text1", "text2", "text3" };
И функцию, естественно, для вывода, аналогичную другим таким же.
И - завалил программу! Улетает при старте в HardFault, как понял, из недр RTOS (Keil CMSIS-RTOS RTX), пытаясь выделить некую память из пула. Я и размер кучи изменял, и стек задач, и ничего не помогает.
Стал с прошлым вариантом сравнивать (вот где пришлись кстати TortoiseHg c Total Commander). Делаю небольшие изменения, компилирую, запускаю. Дошел до этого массива. И как только добавил static const char *Text.... все заработало.
Поможите люди добрые, объясните, как такое могёт быть? Проект выложить не могу, он великий и коммерческий. Хотелось бы понять принцип.
Файлов в проекте - штук 20. И память используется сильно, не могу сказать, вся / не вся. Если компилируется, значит, есть куда пихать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jan 14 2015, 16:23
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Массив - внутри функции. Имя - уникальное (реально - иное), проверил поиском по всем исходникам, удостоверился.
Глянул в map файл. Это имя нашлось в RAM. Как это? w00t.gif
В массиве 40 строк, каждая по 6 символов, и плюс /0. Итого 280 байтов. Нигде в другом месте эти строки не повторяются, хотя, хвостики похожие можно найти. В map вижу размер 160 байтов, в RAM.
Не в том ли загадка, что задан массив статических указателей?
Получается, размер в ОЗУ точно равен размеру указателей!
Может, правильнее двумерный массив использовать?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   static const vs const   Jan 14 2015, 16:02
- - SM   а это сильно зависит от того, где определены эти с...   Jan 14 2015, 16:19
- - SM   Если это внутри функции, то, возможно, просто стек...   Jan 14 2015, 16:40
- - ViKo   Если задаю const chat *Text, что заставляет компил...   Jan 14 2015, 16:47
|- - SM   Цитата(ViKo @ Jan 14 2015, 19:47) Если за...   Jan 14 2015, 16:59
|- - CrimsonPig   Цитата(SM @ Jan 14 2015, 16:59) Объявлени...   Jan 14 2015, 19:03
|- - SM   Цитата(CrimsonPig @ Jan 14 2015, 22:03) т...   Jan 14 2015, 19:20
- - ViKo   Посмотрел листинги со static и без. Для const при ...   Jan 14 2015, 20:02
- - SM   Ну, о чем я и говорил. Скорее всего у Вас стека ма...   Jan 14 2015, 20:06
- - ViKo   Я сделал (?, проверю работоспособность завтра) ина...   Jan 14 2015, 20:12
|- - SM   Цитата(ViKo @ Jan 14 2015, 23:12) Теперь ...   Jan 14 2015, 20:15
||- - ViKo   Цитата(SM @ Jan 14 2015, 23:15) Только на...   Jan 14 2015, 20:18
|- - CrimsonPig   Цитата(ViKo @ Jan 14 2015, 20:12) Я сдела...   Jan 14 2015, 23:38
- - ViKo   static const *text[] используется у отцов-основате...   Jan 15 2015, 01:42
- - ViKo   Проверил. Все работает. Заодно посмотрел, что полу...   Jan 15 2015, 09:35
|- - Andrew2000   на эту тему: http://rus-linux.net/MyLDP/algol/Sha...   Jan 15 2015, 18:17
- - SM   Ну, все в строгом соответствии с ANSI/IEC. Вывод и...   Jan 15 2015, 09:45


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016