VSF中实现了动态数组的功能,依赖vsf_bufmgr动态内存分配,可以自动垃圾回收,也可以手动垃圾回收。实现原理是,由N个table,每个table里有固定数量的buffer(没有分配的buffer可以是NULL),每个buffer由固定数量的数组元素组成。
数据结构如下:
struct vsf_dynarr_t
{
// public
uint32_t item_size;
uint32_t item_num_bitlen;
uint32_t table_size_bitlen;
// private
struct vsflist_t table;
uint32_t length;
};
其中:
item_size:数组元素的大小(建议用4的整数倍)。
item_num_bitlen:每个buffer的由2的item_num_bitlen次方的数组元素组成。
table_size_bitlen:每个table可以管理2的table_size_bitlen次方个buffer。
如果,item_num_bitlen为4,table_size_bitlen为2。那么每个buffer由16个数组元素组成,每个table管理4个buffer,所以一个table可以管理64个数组元素。单个table里,搜索指定序号的数组元素是O(1)复杂度。
API接口:vsf_err_t vsf_dynarr_init(struct vsf_dynarr_t *dynarr);
vsf_err_t vsf_dynarr_fini(struct vsf_dynarr_t *dynarr);
uint32_t vsf_dynarr_get_size(struct vsf_dynarr_t *dynarr);
vsf_err_t vsf_dynarr_set_size(struct vsf_dynarr_t *dynarr, uint32_t size);
void *vsf_dynarr_get(struct vsf_dynarr_t *dynarr, uint32_t pos);
有问题回帖问吧,太简单不知道怎么介绍了。
|