Twemproxy源码分析(四)数据结构(array和string)

23 篇文章 0 订阅
5 篇文章 0 订阅

概述:

本节我们介绍Twemproxy的两个重要的自定义数据结构:array和string。

array:

故名思议,array就是数组,array的代码在nc_array.c和nc_array.h中,我们先来看看array的结构:

数据结构:

array的结构包含:

  1. 当前数组中元素的数量
  2. 指向元素的void指针
  3. 元素的大小
  4. 预申请的空间的元素数

由此可见,array应该具有以下特点:

  1. 需要预申请空间,空间不足则需要重新申请
  2. 数组每个元素大小必须相同

后面我们将通过数组的操作验证。

操作:

对数组的操作包含下面这些,这些都是在nc_array.h中声明和定义的:

接下来我们通过create和push验证一下我们之前的猜想:

从代码可以看出是如何realloc空间的,这里实现的奇怪的是,push操作是将elements数加1,然后返回末尾的element指针。也就是说,调用者需要先调用array_push得到elements指针,然后为其设置字段值,来完成数组元素的push。

另外值得一提的是,array提供了create/destroy和init/deinit这两组创建和销毁函数,这两组函数的区别是:create/destroy同时创建/销毁array和elements空间,而init和deinit只创建/销毁elements空间,看一下array_destroy代码就明白了:

array的代码很少,只有200多行,就不详细介绍其他的操作了。

string:

string的代码在nc_string.c和nc_string.h中,封装了一些对字符串的操作。

数据结构:

string的结构包含两个字段:字符串的长度、指向字符串的指针,就这么简单。

操作:

底下还有用宏定义的一些操作,不过都是操作char*的,这里就不列举了。总的来说string的结构很简单,代码也只有100多行。

小结:

本节我们看了一下array和string这两个数据结构,都很简单,后面我们马上会用到。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值