打印

VSF中的动态数组vsf_dynarr

[复制链接]
1135|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsfopen|  楼主 | 2018-6-23 00:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);
有问题回帖问吧,太简单不知道怎么介绍了。

使用特权

评论回复

相关帖子

沙发
crewn| | 2020-2-22 20:00 | 只看该作者
不错的东西  持续关注

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

325

帖子

8

粉丝