VSF中的动态数组vsf_dynarr

[复制链接]
 楼主| vsfopen 发表于 2018-6-23 00:12 | 显示全部楼层 |阅读模式
VSF中实现了动态数组的功能,依赖vsf_bufmgr动态内存分配,可以自动垃圾回收,也可以手动垃圾回收。实现原理是,由N个table,每个table里有固定数量的buffer(没有分配的buffer可以是NULL),每个buffer由固定数量的数组元素组成。


数据结构如下:
  1. struct vsf_dynarr_t
  2. {
  3.         // public
  4.         uint32_t item_size;
  5.         uint32_t item_num_bitlen;
  6.         uint32_t table_size_bitlen;

  7.         // private
  8.         struct vsflist_t table;
  9.         uint32_t length;
  10. };
其中:
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接口:
  1. vsf_err_t vsf_dynarr_init(struct vsf_dynarr_t *dynarr);
  2. vsf_err_t vsf_dynarr_fini(struct vsf_dynarr_t *dynarr);
  3. uint32_t vsf_dynarr_get_size(struct vsf_dynarr_t *dynarr);
  4. vsf_err_t vsf_dynarr_set_size(struct vsf_dynarr_t *dynarr, uint32_t size);
  5. void *vsf_dynarr_get(struct vsf_dynarr_t *dynarr, uint32_t pos);
有问题回帖问吧,太简单不知道怎么介绍了。
crewn 发表于 2020-2-22 20:00 | 显示全部楼层
不错的东西  持续关注

90

主题

325

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部