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().
Следующий пример показывает, как декларировать и использовать блок памяти, названный "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 | Общее количество кусков памяти в блоке. |
void * memb_alloc | ( | struct memb_blocks * | m | ) |
char memb_free | ( | struct memb_blocks * | m, |
void * | ptr | ||
) |
Освобождение блока памяти из блока, который был ранее декларирован через MEMB().
m | m Блок памяти, ранее декларированный через MEMB(). |
ptr | Указатель на блок памяти, который освобождается. |