uIP 1.0
Файлы | Макросы | Функции
Функции управления блоками памяти

Подпрограммы выделения блока памяти предоставляют простой, но мощный набор фукнций для управления блоками памяти фиксированного размера. Подробнее...

Файлы

файл  memb.c
 

Подпрограммы выделения блока памяти.


файл  memb.h
 

Подпрограммы выделения блока памяти.


Макросы

#define MEMB(name, structure, num)
 Декларирование блока памяти.

Функции

void memb_init (struct memb_blocks *m)
 Инициализирует блок памяти, который был декларирован через MEMB().
void * memb_alloc (struct memb_blocks *m)
 Выделение блока памяти из блока, который был декларирован через MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Освобождение блока памяти из блока, который был ранее декларирован через MEMB().

Подробное описание

Подпрограммы выделения блока памяти предоставляют простой, но мощный набор фукнций для управления блоками памяти фиксированного размера.

Набор блоков памяти статически декларируется маросом MEMB(). Блоки памяти выделяются из декларированной памяти функцией memb_alloc(), и освобождаются функцией memb_free().

Заметки:
Из-за конфликта имен только один MEMB() может быть декларирован на один модуль C, и область действия имен блоков памяти MEMB() локальна для каждого модуля C.

Следующий пример показывает, как декларировать и использовать блок памяти, названный "cmem", который имеет 8 кусков памяти, каждый кусок по 20 байт.

MEMB(cmem, 20, 8);

Макросы

#define MEMB (   name,
  structure,
  num 
)
Макроопределение:
static char MEMB_CONCAT(name,_memb_count)[num]; \
        static structure MEMB_CONCAT(name,_memb_mem)[num]; \
        static struct memb_blocks name = {sizeof(structure), num, \
                                          MEMB_CONCAT(name,_memb_count), \
                                          (void *)MEMB_CONCAT(name,_memb_mem)}

Декларирование блока памяти.

Этот макрос используется для статического декларирования блока памяти, который может использоваться в фукнциях выделения блока. Макрос статически декларирует массив C, размер которого соответствует указанному кличеству блоков и их индивидуальным размерам.

Пример:

MEMB(connections, sizeof(struct connection), 16);
Аргументы:
nameИмя блока памяти (которое позднее используется с memb_init(), memb_alloc() и memb_free()).
sizeРазмер каждого куска памяти, в байтах.
numОбщее количество кусков памяти в блоке.
Примеры:
telnetd.c.

См. определение в файле memb.h строка 102


Функции

void * memb_alloc ( struct memb_blocks *  m)

Выделение блока памяти из блока, который был декларирован через MEMB().

Аргументы:
mБлок памяти, ранее декларированный через MEMB().
Примеры:
telnetd.c.

См. определение в файле memb.c строка 60

char memb_free ( struct memb_blocks *  m,
void *  ptr 
)

Освобождение блока памяти из блока, который был ранее декларирован через MEMB().

Аргументы:
mm Блок памяти, ранее декларированный через MEMB().
ptrУказатель на блок памяти, который освобождается.
Возвращает:
Новый счетчик ссылки для блока памяти (должен быть 0, если блок успешно освобожден, или -1, если указатель "ptr" не указывает на правильный блок памяти).
Примеры:
telnetd.c.

См. определение в файле memb.c строка 80

void memb_init ( struct memb_blocks *  m)

Инициализирует блок памяти, который был декларирован через MEMB().

Аргументы:
mБлок памяти, ранее декларированный через MEMB().
Примеры:
telnetd.c.

См. определение в файле memb.c строка 53