Для встроенных систем память разбивается во время соединения на несколько секций или пулов, то есть: ro (код + константы) rw (куча) zi (нулевая инициализированная память для статических переменных)
Вы можете добавитьЧетвертый раздел в файлах конфигурации компоновщика, который эффективно выделяет пространство на карте памяти для динамического выделения.
Однако, как только вы создали необработанное хранилище для динамической памяти, вам необходимо понять, сколько, сколько и какчасто будут происходить динамические распределения.Из этого вы можете построить картину того, как память будет фрагментироваться с течением времени.
Обычно приложение, работающее без ОС, не использует динамическую память, поскольку вам не нужно иметь дело с последствиями mallocтерпит неудачу.Если это вообще возможно, лучшим решением будет дизайн, чтобы избежать этого.Если это вообще невозможно, попробуйте упростить динамическое поведение, используя несколько больших структур, в которых данные предварительно выделены, прежде чем что-либо понадобится для их использования.
Например, скажем, что у вас есть приложение, которое обрабатывает 10 байтовданные, получая следующие 10 байтов данных для обработки, вы можете реализовать простое решение буферизации.Драйвер всегда будет запрашивать буферы одинакового размера, и потребуется 3 буфера.Добавление небольших метаданных в структуру:
{
int inUse;
char data[10];
}
Вы можете взять массив из трех из этих структур (не забывая инициализировать inUse до 0 и переключаться между [0] и [1], с [2]).зарезервировано для ситуаций, когда происходит несколько слишком много прерываний и требуется следующий буфер, буфер освобождается (необходимость в 3-м буфере). Алгоритм alloc должен будет проверить первый буфер! inUse и вернуть указатель на данныеСвободное просто нужно изменить inUse обратно на 0.
В зависимости от объема доступной оперативной памяти и используемой машины (физической / виртуальной адресации), существует множество возможных алгоритмов, но чем сложнееалгоритм, тем больше времени может занять распределение.