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

结构体 | |
| struct | xwmm_mempool |
| 内存池 更多... | |
| struct | xwmm_mempool_i_allocator |
| interface:分配器 更多... | |
| struct | xwmm_mempool_objcache |
| 对象缓存 更多... | |
| struct | xwmm_mempool_page |
| 内存页 更多... | |
| struct | xwmm_mempool_page_odrbtree |
| 阶红黑树 更多... | |
| struct | xwmm_mempool_page_allocator |
| 页分配器 更多... | |
宏定义 | |
| #define | XWMM_MEMPOOL_PAGE_SIZE (4096U) |
| #define | XWMM_MEMPOOL_OC_8_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_16_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_32_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_64_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_96_PAGE_ODR (1U) |
| #define | XWMM_MEMPOOL_OC_128_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_160_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_192_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_256_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_320_PAGE_ODR (1U) |
| #define | XWMM_MEMPOOL_OC_384_PAGE_ODR (1U) |
| #define | XWMM_MEMPOOL_OC_512_PAGE_ODR (1U) |
| #define | XWMM_MEMPOOL_OC_768_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_1024_PAGE_ODR (0U) |
| #define | XWMM_MEMPOOL_OC_2048_PAGE_ODR (1U) |
| #define | XWMM_MEMPOOL_RAWOBJ_DEF(name, pgodr) |
| 定义内存池结构体的RAW内存空间,用于初始化内存池结构体 | |
| #define | XWMM_MEMPOOL_PAGE_ORDER_CMB (XWSQ_MAX) |
| #define | XWMM_MEMPOOL_PAGE_MAPPING_FREE (0U) |
| #define | XWMM_MEMPOOL_PAGE_MAPPING_INVAILD (XWPTR_MAX) |
内存池是结合了内存切片分配器与伙伴算法分配器的算法。内存管理的基本单位为页, 一页内存为4096字节,页内存使用伙伴算法分配器管理。 内存池还使用对象缓存算法建立各种小尺寸的块:8字节、16字节、32字节、 64字节、96字节、128字节、160字节、192字节、256字节、320字节、384字节、 512字节、768字节、1024字节、2048字节。 当申请内存大于2048字节,直接分配页内存;当申请的内存小于等于2048字节, 就从尺寸最合适的对象缓存分配器中分配一块内存。
| #define XWMM_MEMPOOL_OC_1024_PAGE_ODR (0U) |
1024字节分配器所使用的页的阶数
在文件 allocator.h 第 65 行定义.
| #define XWMM_MEMPOOL_OC_128_PAGE_ODR (0U) |
128字节分配器所使用的页的阶数
在文件 allocator.h 第 57 行定义.
| #define XWMM_MEMPOOL_OC_160_PAGE_ODR (0U) |
160字节分配器所使用的页的阶数
在文件 allocator.h 第 58 行定义.
| #define XWMM_MEMPOOL_OC_16_PAGE_ODR (0U) |
16字节分配器所使用的页的阶数
在文件 allocator.h 第 53 行定义.
| #define XWMM_MEMPOOL_OC_192_PAGE_ODR (0U) |
192字节分配器所使用的页的阶数
在文件 allocator.h 第 59 行定义.
| #define XWMM_MEMPOOL_OC_2048_PAGE_ODR (1U) |
2048字节分配器所使用的页的阶数
在文件 allocator.h 第 66 行定义.
| #define XWMM_MEMPOOL_OC_256_PAGE_ODR (0U) |
256字节分配器所使用的页的阶数
在文件 allocator.h 第 60 行定义.
| #define XWMM_MEMPOOL_OC_320_PAGE_ODR (1U) |
320字节分配器所使用的页的阶数
在文件 allocator.h 第 61 行定义.
| #define XWMM_MEMPOOL_OC_32_PAGE_ODR (0U) |
32字节分配器所使用的页的阶数
在文件 allocator.h 第 54 行定义.
| #define XWMM_MEMPOOL_OC_384_PAGE_ODR (1U) |
384字节分配器所使用的页的阶数
在文件 allocator.h 第 62 行定义.
| #define XWMM_MEMPOOL_OC_512_PAGE_ODR (1U) |
512字节分配器所使用的页的阶数
在文件 allocator.h 第 63 行定义.
| #define XWMM_MEMPOOL_OC_64_PAGE_ODR (0U) |
64字节分配器所使用的页的阶数
在文件 allocator.h 第 55 行定义.
| #define XWMM_MEMPOOL_OC_768_PAGE_ODR (0U) |
768字节分配器所使用的页的阶数
在文件 allocator.h 第 64 行定义.
| #define XWMM_MEMPOOL_OC_8_PAGE_ODR (0U) |
8字节分配器所使用的页的阶数
在文件 allocator.h 第 52 行定义.
| #define XWMM_MEMPOOL_OC_96_PAGE_ODR (1U) |
96字节分配器所使用的页的阶数
在文件 allocator.h 第 56 行定义.
| #define XWMM_MEMPOOL_PAGE_SIZE (4096U) |
在文件 allocator.h 第 51 行定义.
| #define XWMM_MEMPOOL_RAWOBJ_DEF | ( | name, | |
| pgodr | |||
| ) |
定义内存池结构体的RAW内存空间,用于初始化内存池结构体
| [in] | name | 内存数组名 |
| [in] | pgodr | 页的数量,以2的pgodr次方形式表示 |
在文件 allocator.h 第 78 行定义.
| xwer_t xwmm_mempool_free | ( | struct xwmm_mempool * | mp, |
| void * | mem | ||
| ) |
XWMM API:释放内存
| [in] | mp | 内存池的指针 |
| [in] | mem | 内存的首地址 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EALREADY | 页内存已释放 |
| -ERANGE | 内存地址不在内存池的范围内 |
此函数向内存池释放内存。内存必须是此前申请的,如果 mem 是错误的地址或之前被释放过, 将产生未定义的错误。 mem 可以为 NULL ,此函数什么也不做,并且返回错误码 XWOK 。
<No error
在文件 allocator.c 第 342 行定义.


| xwer_t xwmm_mempool_init | ( | struct xwmm_mempool * | mp, |
| const char * | name, | ||
| xwptr_t | origin, | ||
| xwsz_t | size, | ||
| xwsz_t | pgodr, | ||
| xwsz_t | pre, | ||
| void ** | membuf | ||
| ) |
XWMM API:初始化内存池
| [in] | mp | 内存池的指针 |
| [in] | name | 名字 |
| [in] | origin | 内存区域的起始地址 |
| [in] | size | 内存区域的总大小 |
| [in] | pgodr | 页的数量,以2的pgodr次方形式表示 |
| [in] | pre | 预申请的内存的大小 |
| [out] | membuf | 指向缓冲区的指针,通过此缓冲区返回预申请内存的首地址 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -E2SMALL | 内存区域太小 |
| -ESIZE | 内存区域大小size与pgodr指明的页数量不匹配 |
origin ,大小为 size 的内存初始化为内存池:pgodr 表示,只能是2的n次方,即 2, 4, 8, 16, 32, 64, 128, ... , 对应的pgodr分别为 1, 2, 3, 4, 5, 6, 7, ... ;size == (XWMM_MEMPOOL_PAGE_SIZE * (1 << pgodr)) 。pre 以及 membuf 就是作为此用途而设计的。 membuf 可以为 NULL ,表示不需要返回编译器预先申请内存的首地址。 < 每页内存的字节数
<Size error
< 每页内存的字节数
< 每页内存的字节数
<No error
在文件 allocator.c 第 200 行定义.

| xwer_t xwmm_mempool_malloc | ( | struct xwmm_mempool * | mp, |
| xwsz_t | size, | ||
| void ** | membuf | ||
| ) |
XWMM API:从内存池中申请内存
| [in] | mp | 内存池的指针 |
| [in] | size | 申请的大小 |
| [out] | membuf | 指向缓冲区的指针,通过此缓冲区返回申请到的内存的首地址 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOMEM | 内存不足 |
size 的内存:*membuf 返回申请到的内存地址 ,返回错误码为 XWOK ;*membuf 返回 NULL ,返回值为负的错误码。size 为 0 , 通过 *membuf 返回 NULL ,返回错误码为 XWOK ; <No error
< 内存管理对齐的字节数
< 内存管理对齐的字节数
在文件 allocator.c 第 260 行定义.

| xwer_t xwmm_mempool_memalign | ( | struct xwmm_mempool * | mp, |
| xwsz_t | alignment, | ||
| xwsz_t | size, | ||
| void ** | membuf | ||
| ) |
XWMM API:从内存池中申请对齐的内存
| [in] | mp | 内存池的指针 |
| [in] | alignment | 内存的起始地址对齐的字节数,只能是2的n次方 |
| [in] | size | 申请的大小 |
| [out] | membuf | 指向缓冲区的指针,通过此缓冲区返回申请到的内存的首地址 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOMEM | 内存不足 |
memalign() 函数:alignment 如果比 XWMM_ALIGNMENT 小,会被扩大为 XWMM_ALIGNMENT :alignment 只能是2的n次方:alignment , size 会被扩大为 alignment ,alignment , size 会向上对齐到2的n次方,此时也一定为 alignment 的整数倍。*membuf 的值。 < 内存管理对齐的字节数
< 内存管理对齐的字节数
<No error
在文件 allocator.c 第 467 行定义.
| xwer_t xwmm_mempool_objcache_alloc | ( | struct xwmm_mempool_objcache * | oc, |
| void ** | objbuf | ||
| ) |
XWMM API:从对象缓存中申请一个对象
| [in] | oc | 对象缓存的指针 |
| [out] | objbuf | 指向缓冲区的指针,此缓冲区被用于返回对象的指针 |
| XWOK | 没有错误 |
| -ENOMEM | 内存不足 |
< 报告BUG
< 当条件x成立时报告BUG
< 报告BUG
< 当条件x成立时报告BUG
<No error
在文件 objcache.c 第 263 行定义.


| xwer_t xwmm_mempool_objcache_free | ( | struct xwmm_mempool_objcache * | oc, |
| void * | obj | ||
| ) |
XWMM API:释放对象到对象缓存中
| [in] | oc | 对象缓存的指针 |
| [in] | obj | 对象的指针 |
| XWOK | 没有错误 |
| -ERANGE | 内存地址不在内存池的范围内 |
<No error
在文件 objcache.c 第 299 行定义.


| xwer_t xwmm_mempool_objcache_get_capacity | ( | struct xwmm_mempool_objcache * | oc, |
| xwsz_t * | capacity | ||
| ) |
XWMM API:获取对象缓存的容量
| [in] | oc | 对象缓存的指针 |
| [out] | capacity | 指向缓冲区的指针,通过此缓冲区返回对象缓存的容量 |
| XWOK | 没有错误 |
<No error
在文件 objcache.c 第 383 行定义.
| xwer_t xwmm_mempool_objcache_init | ( | struct xwmm_mempool_objcache * | oc, |
| struct xwmm_mempool_page_allocator * | pa, | ||
| const char * | name, | ||
| xwsz_t | objsize, | ||
| xwsz_t | alignment, | ||
| xwsq_t | pg_order, | ||
| ctor_f | ctor, | ||
| dtor_f | dtor | ||
| ) |
XWMM API:初始化对象缓存
| [in] | oc | 对象缓存的指针 |
| [in] | pa | 页分配器的指针 |
| [in] | name | 名字 |
| [in] | objsize | 对象的大小 |
| [in] | alignment | 对齐的大小 |
| [in] | pg_order | 每次预先申请页的数量的阶,几阶就是2的几次方 |
| [in] | ctor | 构造函数 |
| [in] | dtor | 析构函数 |
| XWOK | 没有错误 |
| -EALIGN | 内存区域没有对齐 |
< 内存管理对齐的字节数
< 内存管理对齐的字节数
<No error
在文件 objcache.c 第 54 行定义.


| xwer_t xwmm_mempool_objcache_reserve | ( | struct xwmm_mempool_objcache * | oc, |
| xwsz_t | reserved | ||
| ) |
XWMM API:预留对象到对象缓存中
| [in] | oc | 对象缓存的指针 |
| [in] | reserved | 预留的数量 |
| XWOK | 没有错误 |
| -ENOMEM | 内存不足 |
<No error
在文件 objcache.c 第 344 行定义.

| xwer_t xwmm_mempool_page_allocate | ( | struct xwmm_mempool_page_allocator * | pa, |
| xwsq_t | order, | ||
| struct xwmm_mempool_page ** | pgbuf | ||
| ) |
XWMM API:申请一页内存
| [in] | pa | 页分配器的指针 |
| [in] | order | 页数量的阶,页内存大小: ((1 << order) * pa->pgsize) |
| [out] | pgbuf | 指向缓冲区的指针,通过此缓冲区返回申请到的页控制块的指针 |
| XWOK | 没有错误 |
| -ENOMEM | 内存不足 |
<No error


| xwer_t xwmm_mempool_page_allocator_init | ( | struct xwmm_mempool_page_allocator * | pa, |
| const char * | name, | ||
| xwptr_t | origin, | ||
| xwsz_t | size, | ||
| xwsz_t | pgsize, | ||
| struct xwmm_mempool_page_odrbtree * | odrbtree, | ||
| struct xwmm_mempool_page * | pgarray | ||
| ) |
XWMM API:初始化页分配器
| [in] | pa | 页分配器的指针 |
| [in] | name | 名字 |
| [in] | origin | 内存区域的起始地址 |
| [in] | size | 内存区域的总大小 |
| [in] | pgsize | 单位页的大小 |
| [in] | odrbtree | 阶红黑树数组的指针 |
| [in] | pgarray | 页控制块数组的指针 |
| XWOK | 没有错误 |
| -E2SMALL | 内存区域太小 |
| -EALIGN | 内存区域没有对齐 |
<Too small
< 内存管理对齐的字节数
< 内存管理未对齐掩码
<Not aligned
<Not aligned
<No error


| xwer_t xwmm_mempool_page_find | ( | struct xwmm_mempool_page_allocator * | pa, |
| void * | mem, | ||
| struct xwmm_mempool_page ** | pgbuf | ||
| ) |
依据内存地址查找页
| [in] | pa | 页分配器的指针 |
| [in] | mem | 内存地址 |
| [out] | pgbuf | 指向缓冲区的指针,通过此缓冲区返回申请到的页控制块的指针 |
| XWOK | 没有错误 |
| -ERANGE | 内存地址不在内存池的范围内 |
<No error


| xwer_t xwmm_mempool_page_free | ( | struct xwmm_mempool_page_allocator * | pa, |
| struct xwmm_mempool_page * | pg | ||
| ) |
XWMM API:释放一页内存
| [in] | pa | 页分配器的指针 |
| [in] | pg | 页控制块的指针 |
| XWOK | 没有错误 |
| -EALREADY | 页内存已释放 |
<No error


| xwer_t xwmm_mempool_realloc | ( | struct xwmm_mempool * | mp, |
| xwsz_t | size, | ||
| void ** | membuf | ||
| ) |
XWMM API:调整内存大小
| [in] | mp | 内存池的指针 |
| [in] | size | 申请的大小,当size == 0,realloc等价于free |
| [in,out] | membuf | 指向缓冲区的指针,此缓冲区
|
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOMEM | 内存不足 |
| -ERANGE | 内存地址不在内存池的范围内 |
realloc() 函数:*membuf 为 NULL ,此函数等价于 xwmm_mempool_mealloc(mp, size, membuf) ;*membuf 不为 NULL 且 size 为 0 , 此函数等价于 xwmm_mempool_free(mp, *membuf) ,并且通过 *membuf 返回 NULL ;*membuf 不为 NULL 且 size 比之前的小 ,此函数不重新申请内存,直接返回原来的 *membuf 以及 XWOK ;*membuf 不为 NULL 且 size 比之前的大 ,此函数会尝试重新申请内存:*membuf 返回 NULL 以及 错误码;*membuf 以及 XWOK 。 <No error
<No error
<No error
<No error
<No error
在文件 allocator.c 第 418 行定义.
