-
- проблемы с маллоками начинаются при достаточно интеснивном
использовании, при выделении памяти для структур (зачастую) разного
объема. тогда реально может возникнуть проблема (де) фрагментации и
реаллокирования памяти. что само по себе нетривиальная задача и это
обычно возникает при достаточно больших объемах памяти (пик16ф тут
не показатель совсем). нужно смотреть кто и когда использует
сколько памяти. как так "плюнул и все заработало"? значит так
свезло или нет RED_DRAGON(105 знак., 04.12.2022 01:26)
- В свое время благодаря Игорю Школе с Украины был реализован(портирован) менеджер динамической памяти на связных списках степени 2-ки. Использовал его с успехом на PIC18 с 4кРАМ. Фрагментации быть не может, но памяти может не хватить. Но нехватка решалось количеством подключаемых устройств(разные устройства требовали разного количества выделяемой памяти). Устройств одного типа можно было подключить 32 другого 28(например) и тд. Не нужно заботиться об освобождении перед abivan(169 знак., 07.12.2022 16:51)
- Я прекрасно понимал возможность проблемы с фрагментацией. И, сначала, обеспечил гарантию, что предыдущее выделение памяти будет отменено раньше, чем потребуется следующее. Так, что у меня, по сути, выделение происходило всегда при уже пустой памяти. - Nikolay_Po(07.12.2022 11:01)
- Делал объединение структур данных, которые одновременно не
использовались, даже не понимаю, в чем проблема. Все наглядно, и в
отладке удобно. - VLLV(03.12.2022 19:53)
- Я сначала детально прорабатывал сами функции "бизнес-логики", безотносительно оптимизации использования памяти. И менять доступ к данным со структуры на структуру в союзе было просто долго и с риском возникновения ошибок. Использовались и указатели, и битовые маски... Поэтому, когда выяснилось, что нескольким разным функциям не хватает памяти, решил вопрос быстро при помощи malloc()/free(). Повезло, что не требовалось хранить большие объёмы данных между вызовами. - Nikolay_Po(07.12.2022 11:04)
- Бывают случаи, когда динамическая память используется в режиме
стека: last-in first-out. Практически ещё один стек. В таком режиме
нет никакой фрагментации, и реализацию malloc/free можно сделать
очень просто. Кроме того, расход памяти легко предсказуем, то есть
нет никакой головной боли, которую обычно связывают с динамическим
выделением памяти. - SciFi(03.12.2022 11:29)
- Мой случай, практически. Взял, попользовал, удалил. Следующий! - Nikolay_Po(07.12.2022 11:05)
- так для этого и существует стек aka локальные переменные, его можно использовать. Местами встречаются реализации malloc/free через стек Nikolay801_(1 знак., 08.12.2022 10:20, ссылка)
- Это прекрасно! Дарю оптимальную реализацию менеджера памяти: SciFi(109 знак., 07.12.2022 11:09)
- Прелестно! :-)) - =AlexD=(07.12.2022 17:00)
- Что-то я про выравнивание не вспомнил... Ладно, идею вы поняли :-) - SciFi(07.12.2022 17:03)
- Я смотрел ассемблер посла malloc() и free(). Не сказать, чтобы много инструкций. Использовал готовое. - Nikolay_Po(07.12.2022 11:21)
- Прелестно! :-)) - =AlexD=(07.12.2022 17:00)
- Бывают случаи, когда динамически выделенная память никогда не
освобождается. У FREERTOS есть такой аллокатор. Помнится автор в
мейллисте писал, что сам охренел от того, насколько часто в
эмбеддинге достаточно иметь malloc без free. Типо паршивка
стартует, определяет конфигурацию, создаёт нужные структуры,
запускает нужные задачи - и все работает в таком виде до выключения
питания. - LightElf(04.12.2022 13:49)
- Ну, это частный случай стека, когда много раз сделали push, но до pop дело так и не дошло :-) - SciFi(04.12.2022 13:55)
- Мой случай, практически. Взял, попользовал, удалил. Следующий! - Nikolay_Po(07.12.2022 11:05)
- проблемы с маллоками начинаются при достаточно интеснивном
использовании, при выделении памяти для структур (зачастую) разного
объема. тогда реально может возникнуть проблема (де) фрагментации и
реаллокирования памяти. что само по себе нетривиальная задача и это
обычно возникает при достаточно больших объемах памяти (пик16ф тут
не показатель совсем). нужно смотреть кто и когда использует
сколько памяти. как так "плюнул и все заработало"? значит так
свезло или нет RED_DRAGON(105 знак., 04.12.2022 01:26)