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

 
 
 
Reply to this topicStart new topic
> Создание-удаление задач, Опять о старом
MiklPolikov
сообщение Nov 8 2015, 16:34
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Уже в который раз поднимаю тему динамического создания-удаления задач. Вот к чему пришёл:

Для того что бы это стабильно работало, стек у всех задач должен быть одного размера. Если он разный, то куча будет сегментироваться, и через какое-то время это приведёт к краху системы. Ни одна из стандартных схем выделения памяти не heap1 .... heap5 не реализует дефрагментацию кучи. Получается не очевидное сразу ограничение : "динамическое сознание и удаление требует одинаковый размер стека всех задач"


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 8 2015, 18:06
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



В самом общем случае куча может быть дефрагментирована только одним способом: если для доступа к области динамической памяти используется исключительно двойной указатель (указатель на указатель)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 8 2015, 19:08
Сообщение #3


Гуру
******

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



QUOTE (MiklPolikov @ Nov 8 2015, 18:34) *
Для того что бы это стабильно работало, стек у всех задач должен быть одного размера. Если он разный, то куча будет сегментироваться, и через какое-то время это приведёт к краху системы.

Или примено одного - не отличающегося более, чем вдвое. Ну и радикально проблема решается тем, что при проектировании системы есть проход через фазу кода все "временые" задачи убиты. Ведь они на то и временые что-бы не сущесвовать сколь-нибудь долго, иначе незачем их прибивать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Nov 8 2015, 21:15
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(zltigo @ Nov 8 2015, 22:08) *
Ну и радикально проблема решается тем, что при проектировании системы есть проход через фазу кода все "временые" задачи убиты. Ведь они на то и временые что-бы не сущесвовать сколь-нибудь долго, иначе незачем их прибивать.


Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5 не умеют дефрагментировать кучу, т.е. не умеют склеивать стоящие рядом пустые куски кучи ? Ни чем не занятая куча так и останется разбита на куски.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 9 2015, 06:50
Сообщение #5


Гуру
******

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



QUOTE (MiklPolikov @ Nov 8 2015, 23:15) *
Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5...

Почти первое, что я сделал во FreeRTOS много лет назад, это похерил то уродство, что было в нем менеджером памяти. Так что там дальше городили до heap5 мне неведомо, но нет нималейших причин зачем-то пытаться использовать негодные вещи - ничего не мешает иметь и склеивание и хоть сколь-нибудь разумные алгоритмы поиска свободного блока. Свой менеджер памяти на форуме выкладывал. Он и ВСЮ оставшуюся память сам забирает под распределение и блоки склеивает...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
den_po
сообщение Nov 9 2015, 09:15
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(MiklPolikov @ Nov 9 2015, 00:15) *
Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5 не умеют дефрагментировать кучу, т.е. не умеют склеивать стоящие рядом пустые куски кучи ?

Как это не умеют?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 9 2015, 09:51
Сообщение #7


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(den_po @ Nov 9 2015, 11:15) *
Как это не умеют?


Недавно наткнулся на такой момент в одном менеджере памяти - umm_malloc
Опенсорсный, может и FreeRTOS его позаимствовала.
Так там пока не сделаешь первое выделение и освобождение блока на весь объем памяти, этот менеджер довольно хитро работал.
Он не объединял свободную память если освобождаемые блоки в какой-то момент превышали определенный размер.
Очень знатный баг, но разбираться не стал.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 9 2015, 12:06
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Кстати, нынче модно вот такой менеджер применять - http://tlsf.baisoku.org/
Go to the top of the page
 
+Quote Post

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

 


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


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