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

 
 
> malloc в iar 4.20A
DenF1
сообщение May 4 2007, 11:23
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 15-03-06
Пользователь №: 15 267



Здравствуйте!

Странное поведение функции malloc обнаружилось. Иногда она возвращает указатель на уже выделенную область, хотя область эту является занятой. Складывается впечатление, что рушится системная информация о цепочке выделенных блоков, в результате ошибочной записи по кривому указателю. Где сидит инфа о выделенных блоках? Кто-нить сталкивался с чем-то подобным?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение May 4 2007, 12:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(DenF1 @ May 4 2007, 14:23) *
Здравствуйте!

Странное поведение функции malloc обнаружилось. Иногда она возвращает указатель на уже выделенную область, хотя область эту является занятой. Складывается впечатление, что рушится системная информация о цепочке выделенных блоков, в результате ошибочной записи по кривому указателю. Где сидит инфа о выделенных блоках? Кто-нить сталкивался с чем-то подобным?


Это врядли. Но по своему проекту заметил одну интересную особенность хотя и понятную (интересную для человека). IAR сегменты располагает как придётся. Человек обычно под кучу край озу выделяет, а компилятор в середине озу. Таким образом если совершенно другой ваш сегмент (например стек) вылазит за отведённые (вами же) пределы, то компилятор об этом знать не будет (не статическое распределение памяти а динамическое её потребление. Тем же стеком к примеру). Вот и получится что malloc выделяет занятую память (согласно рамкам установленным компилятором под сегмент она свободна.)

Для того чтобы избежать такой ошибки я чётко определяю реальные размеры стека и прибавляю запас. После чего распределяю оставшуюся кучу.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 4 2007, 12:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ May 4 2007, 15:14) *
После чего распределяю оставшуюся кучу.

Менеджер памяти штука не сложная, посему и самому написать под себя можно.
В "родных" категорически не устраивало:
1. Статическое указание размера памяти под heap - единственное разумное - всю оставшуюся память.
2. Часто встречается наипростейший вариант, когда есть только список свободных блоков и посмотреть кто чем и сколько занят невозможно
3. Часто никаких, даже минимальных (например слияние двух свободных) мер по уменьшению дефрагментации не предпринимается.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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