Что такое метод распределения памяти в Arduino

В настоящее время я работаю над заданием для своего курса по встраиваемым системам, и мой профессор попросил нас определить метод распределения памяти, используемый в Arduino. В частности, мне нужно определить, какие методы выделения памяти используются: наилучшее, быстрое, наихудшее, следующее или первое соответствие.

Несмотря на то, что мы провели онлайн-исследование и обратились за помощью к моим коллегам, мы не смогли найти ответ на этот вопрос.

Я был бы очень признателен за любые идеи или информацию о методе распределения памяти, используемом в Arduino.

Спасибо.

, 👍1

Обсуждение

https://www.nongnu.org/avr-libc/user-manual/malloc.html, @Juraj


2 ответа


Лучший ответ:

2

Используй источник, Люк!

Ардуино на основе AVR используют библиотеку avr-libc, которая предоставляет malloc() и другие. Вы можете прочитать исходный код онлайн. Он щедро прокомментирован, и вы можете довольно хорошо понять стратегию распределения, читая только комментарии.

,

1

Короткий ответ: использовались как первое, так и наилучшее соответствие.

Представление malloc в avr-libc использует так называемый список свободных мест для отслеживания свободного места в памяти.

Когда есть запрос памяти, он начинается с поиска в этом списке первого точного совпадения [First Fit].

Во время цикла по списку он отслеживает часть памяти, которая оставит наименьшее количество места (наилучшее соответствие). Если точное совпадение не найдено, используется этот фрагмент памяти [Best Fit].

Кроме того, он не использует этот участок памяти напрямую, он сначала проверяет его размер, если он достаточно велик, он берет необходимый объем памяти и добавляет остаток в список свободных, в противном случае он выделяет весь кусок памяти.

Обратите внимание, что он выделяет новое пространство памяти для кучи, если не находит первое или наилучшее соответствие.


Примеры сценариев:

  1. Первое соответствие:
  • Свободный список: [64, 128, 128, 256, 512, 128]
  • Запрос: 128
  • Действие: возьмите первые 128.
  1. Наилучшее соответствие:
  • Свободный список: [64, 256, 512]
  • Запрос: 128
  • Действие: возьмите 256, используйте 128 и добавьте остальные 128 в список бесплатных.
  1. Наилучшее соответствие:
  • Свободный список: [64, 256, 512, 130]
  • Запрос: 128
  • Рекомендация: возьмите 130 и используйте все.

Надеюсь, теперь все ясно!

,