Axel 1 21 мая, 2023 Опубликовано 21 мая, 2023 · Жалоба Как правильно приделать одно к другому (в смысле аллокатора памяти)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба А какие проблемы с аллокатором? У FreeRTOS из 5 штук - выбирайте любой RapidJSON: Allocator::Malloc -> pvPortMalloc Allocator::Free -> vPortFree Allocator::Realloc -> pvPortMalloc + vPortFree Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 33 minutes ago, xvr said: Allocator::Realloc -> pvPortMalloc + vPortFree А память не утечёт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 1 hour ago, tonyk_av said: А память не утечёт? С чего бы? Выделяете новую память требуемого размера, копируете в неё старое содержимое, старую память освобождаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 1 minute ago, xvr said: С чего бы? Но ведь на месте освобождённой будет "дырка". Где гарантия того, что при следующем обращении будет запрошена память размером с "дырку"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба Just now, tonyk_av said: Но ведь на месте освобождённой будет "дырка". Где гарантия того, что при следующем обращении будет запрошена память размером с "дырку"? Этим занимается менеджер памяти (точнее heap_2, heap_4 или heap_5). Если будет запрос подходящего размера, то он займёт 'дырку'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба В 21.05.2023 в 09:54, Axel сказал: Как правильно приделать одно к другому (в смысле аллокатора памяти)? Правильно - не использовать аллокатор вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 7 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 3 часа назад, xvr сказал: Этим занимается менеджер памяти (точнее heap_2, heap_4 или heap_5). Если будет запрос подходящего размера, то он займёт 'дырку'. А потом снаружи поступят запросы неподходящего размера, менеджер дырки занять не сможет, исчерпает память и будет очередной "фобос-в-грунт". Проблема в непредсказуемости. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 1 hour ago, _3m said: А потом снаружи поступят запросы неподходящего размера, менеджер дырки занять не сможет, исчерпает память и будет очередной "фобос-в-грунт". Вот-вот, я на это и намекал. Тем не менее, ИМХО, выход есть. Если известны размеры полей, то можно написать свой распределитель памяти, который будет учитывать специфику обрабатываемых данных и будет распределять память без "дырок". 1 hour ago, _3m said: Проблема в непредсказуемости. Она решается путём статического распределения памяти для определённого количества элементов. Да, будет резервироваться некоторый избыток памяти, который останется неиспользованным, но по другому нельзя, иначе " будет очередной "фобос-в-грунт". Кстати, NASA разрешает использовать в программах malloc-free и new-delete до входа в основной цикл программы управления. Внутри него запрещено динамическое выделение памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 5 hours ago, _3m said: А потом снаружи поступят запросы неподходящего размера, менеджер дырки занять не сможет, Это общая проблема любых алокаторов памяти. К связке FreeRTOS и RapidJSON она отношения не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 22 мая, 2023 Опубликовано 22 мая, 2023 · Жалоба 16 часов назад, tonyk_av сказал: Она решается путём статического распределения памяти для определённого количества элементов. Да, будет резервироваться некоторый избыток памяти, который останется неиспользованным, но по другому нельзя А почему "избыток" и откуда распространённое заблуждение, что статическое распределение требует больше памяти? Статическое распределение как правило требует меньше памяти. Но да - оно требует бОльшего мастерства от кодонаписателя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 23 мая, 2023 Опубликовано 23 мая, 2023 · Жалоба Фрагментация кучи на физической памяти — неустранимая проблема. Успешно она преодолевается при использовании виртуальной памяти — сиречь через MMU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 23 мая, 2023 Опубликовано 23 мая, 2023 (изменено) · Жалоба 9 hours ago, jcxz said: Сатическое распределение как правило требует меньше памяти. Нет, бОльшего. Ведь приходится резервировать память, априори не зная реальную потребность. По-уму, нужно накопить статистику потребности, чтобы минимизировать избыточность. 9 hours ago, jcxz said: Но да - оно требует бОльшего мастерства от кодонаписателя. Как раз наоборот, меньшего. У меня в ПЛК именно так сделана поддержка Модбас и I2C. Никто не может предсказать, сколько пользователь активирует функциональных блоков "Запрос по Модбас", поэтому выделяется какое-то разумное количество памяти для запросов. 3 hours ago, dxp said: Фрагментация кучи на физической памяти — неустранимая проблема. Успешно она преодолевается при использовании виртуальной памяти — сиречь через MMU. По-честному- это не преодоление. Никто не знает, в какой момент потребуется переконфигурация MMU для уборки "дырок". Может, в этот момент будет работать алгоритм аварийной защиты, а мы остановим процессор для обслуживания памяти. По этой причине в контроллерах, управляющих ответственным оборудованием, запрещено использование языков программирования, которым необходимо динамическое управление памятью. Изменено 23 мая, 2023 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 175 23 мая, 2023 Опубликовано 23 мая, 2023 · Жалоба 1 час назад, tonyk_av сказал: Нет, бОльшего. Ведь приходится резервировать память, априори не зная реальную потребность... Про оверлеи слышали? Функционал изделия довольно часто можно разбить на независимые части, которым не обязательно работать всегда одновременно... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 23 мая, 2023 Опубликовано 23 мая, 2023 · Жалоба 11 minutes ago, Arlleex said: Про оверлеи слышали? С ПЛК работали? Там такая штука не канает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться