XWOS API
4.0
XWOS C/C++ API参考手册
|
XWOS内存管理:伙伴算法内存块分配器 更多...
#include <xwos/standard.h>
#include <xwos/lib/xwlog.h>
#include <xwos/lib/bclst.h>
#include <xwos/lib/xwbop.h>
#include <xwos/osal/lock/spinlock.h>
#include <xwos/mm/common.h>
#include <xwos/mm/bma.h>
宏定义 | |
#define | xwmm_bmalogf(lv, fmt, ...) |
函数 | |
static struct xwmm_bma_bcb * | xwmm_bma_mem_to_bcb (struct xwmm_bma *bma, void *mem) |
从内存块首地址获得其控制块的指针 | |
static void * | xwmm_bma_bcb_to_mem (struct xwmm_bma *bma, struct xwmm_bma_bcb *bcb) |
从内存块的控制块指针获得内存块的首地址 | |
static struct xwmm_bma_bcb * | xwmm_bma_find_buddy (struct xwmm_bma *bma, struct xwmm_bma_bcb *bcb) |
寻找内存块的伙伴 | |
static void | xwmm_bma_orderlist_add (struct xwmm_bma *bma, struct xwmm_bma_orderlist *ol, xwu8_t odr, struct xwmm_bma_bcb *bcb) |
将一块内存加入到阶链表 | |
static xwer_t | xwmm_bma_orderlist_remove (struct xwmm_bma *bma, struct xwmm_bma_orderlist *ol, xwu8_t odr, struct xwmm_bma_bcb *bcb) |
从阶链表中删除一块内存 | |
static struct xwmm_bma_bcb * | xwmm_bma_orderlist_choose (struct xwmm_bma *bma, struct xwmm_bma_orderlist *ol) |
从阶链表中选择一块内存,并返回其块控制块 | |
static void | xwmm_bma_divide_block (struct xwmm_bma *bma, struct xwmm_bma_bcb *bcb, xwsq_t target_odr, struct xwmm_bma_orderlist *curr_ol) |
将大内存块分割成小块 | |
static void | xwmm_bma_combine (struct xwmm_bma *bma, struct xwmm_bma_bcb *bcb) |
合并内存块 | |
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:释放内存块 | |
XWOS内存管理:伙伴算法内存块分配器
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
在文件 bma.c 中定义.
|
static |
|
static |
合并内存块
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | bcb | 内存块的控制块的指针 |
< 阶的掩码
< 块已被合并
< 块正在被使用
< 报告BUG
< 当条件x成立时报告BUG
< 块已被合并
< 块正在被使用
< 块正在被使用
< 块已被合并
< 块正在被使用
< 块正在被使用
|
static |
将大内存块分割成小块
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | bcb | 大块的内存块的控制块的指针 |
[in] | target_odr | 目标块数量的阶 |
[in] | curr_ol | 当前被分割的大块所在的阶链表 |
< 阶的掩码
< 块已被合并
< 块正在被使用
< 报告BUG
< 当条件x成立时报告BUG
< 块正在被使用
< 块正在被使用
|
static |
|
static |
从内存块首地址获得其控制块的指针
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | mem | 内存块的首地址 |
|
static |
将一块内存加入到阶链表
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | ol | 阶链表的指针 |
[in] | odr | 阶链表的阶 |
[in] | bcb | 内存块的控制块指针 |
< 块正在被使用
< 阶的掩码
|
static |
从阶链表中选择一块内存,并返回其块控制块
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | ol | 阶链表的指针 |
-ENOENT | 阶链表为空 |
< 块正在被使用
|
static |
从阶链表中删除一块内存
[in] | bma | 伙伴算法内存块分配器对象的指针 |
[in] | ol | 阶链表的指针 |
[in] | odr | 阶链表的阶 |
[in] | bcb | 内存块的控制块指针 |
XWOK | 删除成功 |
-ESRCH | 阶链表中不存在此内存块 |
< 去除未使用变量的警告
< 块正在被使用
<No error