LINUX.ORG.RU

Посоветуйте аллокатор для С под эмбеды

 , ,


0

5

В гуевую библиотеку LVGL нужен аллокатор на замену родного.

  • heap обычно 4К-32К
  • выделяемые объекты в основном 10-100 байт

Посоветуйте что-нибудь проверенное под такие задачи. Но без фанатизма с ручным управлением пулами.

Из правдоподобного нагуглил такое:

но не хватает опыта, чтобы понять насколько это все актуально.

★★★★★

выделяемые объекты в основном 10-100 байт

Такие объекты лучше хранить в массивах (индекс в массиве и адрес от malloc вполне себе сопоставимые сущности), а то malloc будет тебе выравнивать по границе 32/64 байта.

heap обычно 4К-32К

Т.е. объектов пару сотен? Тогда точно, реализуй пул объектов.

AlexVR ★★★★★ ()
Ответ на: комментарий от AlexVR

Хочется готовое решение, которое снаружи имеет стандартный интерфейс (malloc/free) а внутри само все по пулам разложит по мере необходимости.

https://github.com/mattconte/tlsf - вот еще вариант.

Их как бы готовых вагон, но у меня нет опыта, чтобы решить какой взять без приключений.

Vit ★★★★★ ()

маллоки разные есть. Вопрос как часто будет free. Чаще всего в embedded исползают статичный malloc без возможнисти free. Типа

char heap[HEAP_SIZE];
void* heapPtr = heap; 
void* malloc(size_t size) { 
	void* ptr = heapPtr;
	heapPtr += size; 
	return ptr;
}


Для мелких одинаковых объектов есть small object allocator. General purpose allocator для embedded слишком жирно

bga_ ★★★ ()
Ответ на: комментарий от bga_

Она вообще против аллокаций как таковых, неважно сделаете вы ее на куче или на «куче». Всё, что дозволено - это стек без alloca и ограниченная вложенность функций.

PPP328 ★★★★ ()
Ответ на: комментарий от bga_

Это гуй, без упарывания по мирсрам. Там много free, если динамически экраны с листбоксами создавать.

Просто дефолтный аллокатор ну совсем ущербный - старый, самопальный. Надо на что-нибудь заменить и забыть как страшный сон. Задачи выжать ну совсем максимум нет. Тюнить пачки пулов под фиксированные объекты нафик не уперлось.

Vit ★★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей