Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет38/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   34   35   36   37   38   39   40   41   ...   129
Kurniz

pvPortMalloc() будет помещен, например, 
блок памяти задачи, используется алгоритм 
наилучших подходящих фрагментов (the 
best fit algorithm).
Работа алгоритма наилучших подходящих 
фрагментов заключается в следующем. Когда 
pvPortMalloc() запрашивает блок памяти 
заданного размера, происходит поиск сво-
бодного участка, размер которого как можно 
ближе к размеру запрашиваемого блока и, 
естественно, больше его. Например, струк-
тура кучи представляет собой 3 свободных 
участка памяти размером 5, 25 и 100 байт. 
Функция pvPortMalloc() запрашивает блок 
памяти 20 байт. Тогда наименьший подходя-
щий по размеру участок памяти — участок 
размером 25 байт. 20 байт из этого участка 
будут выделены, а оставшиеся 5 байт оста-
нутся свободными.
Реализация алгоритма наилучших подходя-
щих фрагментов в FreeRTOS не предусматри-
вает слияния двух примыкающих друг к дру-
гу свободных участков в один большой сво-
бодный участок. Поэтому при использовании 
схемы heap_2.c возможна фрагментация кучи. 
Однако фрагментации можно не опасаться, 
если размер выделяемых и освобождаемых 
впоследствии блоков памяти не изменяется 
в течение выполнения программы.
Схема выделения памяти heap_2.c подхо-
дит для приложений, где создаются и уни-
чтожаются задачи, причем размер стека 
при создании задач целесообразно остав-
лять неизменным.
На рис. 6а изображена куча FreeRTOS, бло-
ки памяти под три задачи располагаются по-
следовательно. На рис. 6б Задача 2 уничтоже-
на, куча содержит два свободных участка па-
мяти. На рис. 6в создана Задача 4 с размером 
стека таким же, как был у Задачи 2. В соответ-
ствии с алгоритмом наилучших подходящих 
фрагментов Задаче 4 выделен блок, который 
раньше занимала Задача 2, фрагментации 
кучи не произошло.
Время выполнения функций pvPortMalloc() 
и vPortFree() для схемы heap_2.c не является 
детерминированной величиной, однако их 
реализация значительно эффективнее стан-
дартных функций malloc() и free().
Более подробно с существующими алго-
ритмами выделения памяти можно познако-
миться в [8].


Достарыңызбен бөлісу:
1   ...   34   35   36   37   38   39   40   41   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет