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

 
 
> Посоветуйте готовый менеджер памяти
pernatui
сообщение Jul 9 2009, 13:01
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 26-10-08
Пользователь №: 41 197



Может быть существуют в открытом коде менеджеры памяти для ARM. Памяти 64к.

Заранее спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jul 9 2009, 16:48
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Написан на С, ставится на любую систему в течение получаса


Если есть алгоритм, пофиг, на чем писано. Так что это не достоинства, а так, пеар smile.gif

Цитата
и отличается высоким быстродействием и эффективностью.


Скажем так, O(1) (а именно такое у него быстродействие) куплено ценой перерасхода ОЗУ. Велик он (перерасход) или нет - зависит от основного кода, как он работает с кучей.

По поводу менеджеров. Я где-то рассказывал, какой способ я нынче применяю, повторюсь...

Обычные менеджеры требуют довольно длительной блокировки кучи как ресурса - на то время, пока собственно и выполняются действия по занятию/освобождению кусочка. Это часто не позволяет применять прямую работу с кучей в различных реалтаймовых процедурах - вполне возможно, что из-за блокировки кучи как ресурса, будет занято слишком много времени. Стандартный выход - аллоцирование кусочков (обычно фиксированной длинны) для таких задач из заранее заготовленных пулов с соответствующей узкозаточенностью. Пример (хотя и аппаратный) - очереди кусочков в MAC'ах LPC, SAM7, и т.д. Но хотелось бы иметь универсальный алгоритм (и один malloc/free на весь софт).

Я сейчас большей универсальности добиваюсь следующим способом:

1. Размер аллоцируемых кусочков округляется до некоторой логарифмической сетки (этим уменьшается общее количество различных размеров, но и растет перерасход по памяти).
2. Для каждого размера заранее создается связанный список уже заготовленных кусочков (аллоцированных из большой кучи). Начальное количество в каждой цепочке выбирается исходя из тестовых прогонов софта.
3. Аллоцирование кусочка представляет из себя:
а) табличное округление желаемого размера до выбранной сетки (в большую сторону, конечно),
б) получение начального адреса связанного списка, соответствующего округленному размеру,
в) извлечение из односвязного списка первого элемента.
4. Деаллоцирование - простой возврат кусочка в необходимый список (тоже выполняется в начало списка).
5. В отдельном низкоприоритетном процессе запас кусочков в связанных списках поддерживается на каком-то выбранном уровне (задается по результатам тестовых прогонов). Естественно, это происходит возвратом кусочков из списков в большую кучу (если кусочков слишком много) и занятием новых кусочков и добавлением в список (если кусочков слишком мало).
6. В пункте 3 есть аварийный режим (ежели нужный список пуст) - большая блокировка на занятии кусочка из большой кучи. При правильно выбранных коэффициентах в пункте 5 этот пункт никогда не случается wink.gif

Только пункт 3в (и аналогичный код в возврате кусочка) требует блокировки ресурсов. Причем, т.к. код, выполняемый в состоянии блокировки минимален (не в смысле О(1), а в самом прямом смысле - не более десятка команд процессора), то оказывается вполне возможным производить блокировку не поднятием больших примитивов синхронизации на уровне ОС, а банальным запрещением прерываний.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- pernatui   Посоветуйте готовый менеджер памяти   Jul 9 2009, 13:01
- - HARMHARM   Уважаемый Zltigo выкладывал здесь.   Jul 9 2009, 13:10
|- - pernatui   большое спасибо буду изучать..нашел упоминание об ...   Jul 9 2009, 13:36
|- - Сергей Борщ   Цитата(pernatui @ Jul 9 2009, 16:36) Прав...   Jul 9 2009, 15:22
- - pernatui   будьте осторожнее в высказываниях!!! и...   Jul 9 2009, 15:36
- - sergeeff   Я уже неоднократно призывал посмотреть форумчан в ...   Jul 9 2009, 16:01
|- - Quasar   Цитата(sergeeff @ Jul 9 2009, 20:01) Я уж...   Jul 9 2009, 16:15
||- - sergeeff   Цитата(Quasar @ Jul 9 2009, 20:15) Я посм...   Jul 9 2009, 16:21
|- - AlexandrY   По этой ссылке голый алгоритм хотя и работоспособн...   Jul 9 2009, 17:10
- - Rst7   ЦитатаБраво, вы изобрели велосипед! Зато у ме...   Jul 9 2009, 17:21
|- - AlexandrY   Мда, это находка, патентовать надо Эт уже только ...   Jul 9 2009, 18:48
- - Rst7   ЦитатаМда, это находка, патентовать надо Эт уже то...   Jul 9 2009, 19:17
|- - AlexandrY   Я вообще-то без иронии, хотел типа уважительно выр...   Jul 9 2009, 20:16
|- - sergeeff   Цитата(AlexandrY @ Jul 10 2009, 00:16) Я ...   Jul 9 2009, 22:43
|- - AlexandrY   Ваша правда по пункту 1. Там действительно обнаруж...   Jul 10 2009, 11:08
- - sergeeff   Если нет памяти и хочется чего по-проще, есть знам...   Jul 9 2009, 19:38
- - pernatui   спасибо за коментарии..Применение аллокатор для се...   Jul 10 2009, 10:26
- - Rst7   ЦитатаПрименение аллокатор для сетевого стека, для...   Jul 10 2009, 10:30
- - sergeeff   Никак не могу понять, откуда вы взяли цифру 20К, к...   Jul 10 2009, 12:18
|- - AlexandrY   Что тут непонятного, посчитайте сколько тот массив...   Jul 10 2009, 12:58
- - MALLOY2   Могу предложить мной писанный менагер. Главным ша...   Jul 10 2009, 15:04
- - sergeeff   Быстродействие менеджеров - штука не однозназначна...   Jul 10 2009, 17:39
- - MALLOY2   Естественно, я проверял на пропускной способности ...   Jul 10 2009, 18:05
- - sergeeff   Мы лет 6 используем во всех разработках BGET. Когд...   Jul 10 2009, 18:44
- - dch   в u-boot-е или арм буте есть компактный хорошо пр...   Jul 22 2009, 02:28


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

 


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


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