|
XWOS API
4.0
XWOS C/C++ API参考手册
|

结构体 | |
| struct | xwmm_bma_orderlist |
| 阶链表 更多... | |
| struct | xwmm_bma_bcb |
| 块控制块 更多... | |
| struct | xwmm_bma |
| 伙伴算法内存块分配器 更多... | |
宏定义 | |
| #define | XWMM_BMA_MAX_ORDER ((xwu8_t)126) |
| #define | XWMM_BMA_COMBINED ((xwu8_t)127) |
| #define | XWMM_BMA_ORDER_MASK ((xwu8_t)0x7F) |
| #define | XWMM_BMA_INUSED ((xwu8_t)0x80) |
| #define | XWMM_BMA_RAWOBJ_DEF(name, blkodr) |
| 定义伙伴算法内存块分配器结构体的RAW内存空间, 用于初始化伙伴算法内存块分配器结构体 | |
函数 | |
| xwer_t | xwmm_bma_init (struct xwmm_bma *bma, const char *name, xwptr_t origin, xwsz_t size, xwsz_t blksize, xwsz_t blkodr) |
| XWMM API:初始化伙伴算法内存块分配器 | |
| xwer_t | xwmm_bma_alloc (struct xwmm_bma *bma, xwsq_t order, void **membuf) |
| XWMM API:申请一块连续的内存 | |
| xwer_t | xwmm_bma_free (struct xwmm_bma *bma, void *mem) |
| XWMM API:释放内存块 | |
伙伴算法分配器在分配时,会将内存不断地二等分,直到切割到能满足内存的最小尺寸为止。 释放时会检查与之相邻并等长的内存块(称为伙伴)是否空闲, 如果是,就和“伙伴”合并成更大的内存块, 然后继续检测合并后的内存块是否也存在空闲的伙伴,一直向上合并到不能合并为止。
| #define XWMM_BMA_RAWOBJ_DEF | ( | name, | |
| blkodr | |||
| ) |
定义伙伴算法内存块分配器结构体的RAW内存空间, 用于初始化伙伴算法内存块分配器结构体
| [in] | name | 内存数组名 |
| [in] | blkodr | 伙伴算法内存块分配器中单位内存块的数量,以2的blkodr次方形式表示 |
| xwer_t xwmm_bma_init | ( | struct xwmm_bma * | bma, |
| const char * | name, | ||
| xwptr_t | origin, | ||
| xwsz_t | size, | ||
| xwsz_t | blksize, | ||
| xwsz_t | blkodr | ||
| ) |
XWMM API:初始化伙伴算法内存块分配器
| [in] | bma | 伙伴算法内存块分配器的指针 |
| [in] | name | 名字 |
| [in] | origin | 内存区域的起始地址 |
| [in] | size | 内存区域的大小 |
| [in] | blksize | 伙伴算法内存块分配器中单位内存块的大小 |
| [in] | blkodr | 伙伴算法内存块分配器中单位内存块的数量,以2的blkodr次方形式表示 |
| -ESIZE | 内存区域大小不匹配 |
2, 4, 8, 16, 32, 64, 128, ... ,对应的 blkodr 分别为 1, 2, 3, 4, 5, 6, 7, ... ;size == (blksize * (1 << blkodr)) 。 <Size error
< 块正在被使用
< 块已被合并
< 块正在被使用
<No error

XWMM API:申请一块连续的内存
| [in] | bma | 伙伴算法内存块分配器对象的指针 |
| [in] | order | 块数量的阶,内存块大小: ((1 << order) * bma->blksize) |
| [out] | membuf | 指向地址缓存的指针,通过此指针缓存返回申请到的内存的首地址 |
| -EFAULT | 空指针 |
| -ERANGE | order无效 |
| -ENOMEM | 内存不足 |
<No error

XWMM API:释放内存块
| [in] | bma | 伙伴算法内存块分配器对象的指针 |
| [in] | mem | 内存块的首地址指针 |
| XWOK | 没有错误 |
| -EINVAL | 参数错误 |
| -ERANGE | 内存块不属于指定的伙伴算法内存块分配器对象 |
< 块正在被使用
<No error
