LWMalloc — это сверхлегковесный динамический аллокатор памяти, разработанный для встраиваемых систем, который, по заявлениям, превосходит ptmalloc из Glibc, обеспечивая до 53% более быстрое время выполнения и на 23% меньшее использование памяти.
Malloc может вызывать фрагментацию памяти во встраиваемых системах, что потенциально приводит к сбоям после длительной работы прошивки. Сборка мусора — это один из методов снижения фрагментации, но он не всегда практичен на устройствах с ограниченными ресурсами, и некоторые просто избегают использования malloc в своей прошивке, предпочитая статическое выделение памяти или пулы памяти для повышения надежности. Пользовательские динамические аллокаторы памяти — это еще один вариант, и именно это предоставляет LWMalloc.
LWMalloc описан в статье под названием “LWMalloc: A Lightweight Dynamic Memory Allocator for Resource-Constrained Environments” следующим образом:
LWMalloc включает легковесную структуру данных, политику отложенного слияния (DC) и выделенные пулы небольших блоков для оптимизации выделения памяти. Легковесная структура данных минимизирует накладные расходы метаданных, обеспечивая компактную и эффективную реализацию. Политика DC снижает накладные расходы выполнения, откладывая избыточные операции до момента выделения, сохраняя как эффективность, так и низкое время отклика. Выделенные пулы малых блоков обеспечивают выделение памяти за O(1) для небольших запросов, которые часто встречаются в динамических паттернах аллокации, путём их разделения на пулы фиксированного размера.
Исследователи из Сеульского национального университета науки и технологий (SEOULTECH), разработавшие динамический аллокатор памяти LWMalloc, провели его тестирование против ptmalloc и сообщили о следующих результатах и ключевых преимуществах:
- На 53% более быстрое время выполнения
- На 23% меньшее использование памяти
- LWMalloc состоит из 530 строк кода и имеет размер 20 КБ, что сравнимо с 4838 строками кода и размером 116 КБ у ptmalloc
В сопутствующем пресс-релизе также упоминаются jemalloc, tcmalloc и mimalloc как альтернативы ptmalloc для улучшенного управления памятью, но они, по словам корейских исследователей, «страдают от высокого потребления памяти, больших размеров библиотек, сложности и eventual performance degradation». Доступ к полной научной статье требует платной подписки IEEE, но я заметил, что C-код и тестовая программа также доступны на GitHub . Он использует стандартные вызовы malloc, calloc, realloc и free, поэтому для интеграции в проект не потребуется изменять код приложения, а библиотека может быть внедрена во время выполнения для замены malloc/calloc/realloc/free через LD_PRELOAD.
Хотя LWMalloc может принести пользу любой embedded- или IoT-системе со строгими ограничениями по памяти и производительности, SEOULTECH выделяет потребительскую электронику (умные телевизоры, ТВ-приставки, бытовую технику), мобильные и носимые устройства, автомобильные системы с реальным временем и приложения для edge AI-вычислений.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.