Что такое метод распределения памяти в Arduino
В настоящее время я работаю над заданием для своего курса по встраиваемым системам, и мой профессор попросил нас определить метод распределения памяти, используемый в Arduino. В частности, мне нужно определить, какие методы выделения памяти используются: наилучшее, быстрое, наихудшее, следующее или первое соответствие.
Несмотря на то, что мы провели онлайн-исследование и обратились за помощью к моим коллегам, мы не смогли найти ответ на этот вопрос.
Я был бы очень признателен за любые идеи или информацию о методе распределения памяти, используемом в Arduino.
Спасибо.
@Noran Hany, 👍1
Обсуждение2 ответа
Лучший ответ:
Используй источник, Люк!
Ардуино на основе AVR используют библиотеку avr-libc, которая предоставляет
malloc()
и другие. Вы можете прочитать исходный код онлайн.
Он щедро прокомментирован, и вы можете довольно хорошо понять
стратегию распределения, читая только комментарии.
Короткий ответ: использовались как первое, так и наилучшее соответствие.
Представление malloc в avr-libc использует так называемый список свободных мест для отслеживания свободного места в памяти.
Когда есть запрос памяти, он начинается с поиска в этом списке первого точного совпадения [First Fit].
Во время цикла по списку он отслеживает часть памяти, которая оставит наименьшее количество места (наилучшее соответствие). Если точное совпадение не найдено, используется этот фрагмент памяти [Best Fit].
Кроме того, он не использует этот участок памяти напрямую, он сначала проверяет его размер, если он достаточно велик, он берет необходимый объем памяти и добавляет остаток в список свободных, в противном случае он выделяет весь кусок памяти.
Обратите внимание, что он выделяет новое пространство памяти для кучи, если не находит первое или наилучшее соответствие.
Примеры сценариев:
- Первое соответствие:
- Свободный список: [64, 128, 128, 256, 512, 128]
- Запрос: 128
- Действие: возьмите первые 128.
- Наилучшее соответствие:
- Свободный список: [64, 256, 512]
- Запрос: 128
- Действие: возьмите 256, используйте 128 и добавьте остальные 128 в список бесплатных.
- Наилучшее соответствие:
- Свободный список: [64, 256, 512, 130]
- Запрос: 128
- Рекомендация: возьмите 130 и используйте все.
Надеюсь, теперь все ясно!
- Программирование микроконтроллера Attiny85 без arduino
- Заменить предохранители Arduino Uno (может ли Arduino Uno заменить свои собственные предохранители?)
- Как узнать максимальное используемое пространство стека?
- Arduino EEPROM сохраняет старые данные после прошивки новой программой
- 8-битные микроконтроллеры AVR и PIC - Можно ли добавить: внешнюю флэш-память, внешнюю оперативную память, видео-и аудиовыход, дополнительные адресные шины?
- AVRdude неправильно считывает значения байтов предохранителя
- Одна и та же структура занимает разное пространство в памяти Uno и NodeMCU ESP8266, что приводит к повреждению данных при передаче через nRF24L01+
- программирование ардуино на чистом с
https://www.nongnu.org/avr-libc/user-manual/malloc.html, @Juraj