redis_3.0.7_sds.h_sdslen()

源函数

static inline size_t sdslen(const sds s)
{
       struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
       return sh->len;
}

这是redis中用来计算字符串长度的函数,时间复杂度为O(1)。具体为什么这么写,我也不是很明白。随着学习的深入,慢慢就懂了。 主要让我困惑的就是这一句:

struct sdshdr *sh=(void*)(s-(sizeof(struct sdshdr)));
//这一句是什么意思呢?为什么这么写?理由是什么?
//优势很明显,时间复杂度只有O(1),很高效。

源函数

static inline size_t sdslen(const sds s)
{
struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
>return sh->free;

}

这是描述当前sds字符串中还剩下的空间量的函数。为什么这么写,我也不是很明白。

时间复杂度也是O(1),很高效的写法啊。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Code_iOS

数据结构?

数据结构可以实现一种或多种抽象数据类型,而抽象数据类型(Abstract Data Type [ADT])就是一种数学的抽象,一些操作的集合【插入、删除等操作】...

1362
来自专栏编程

零基础学习人工智能之Python篇1-Python定义

学习Python首先咱要明白Python是什么 定义: Python是一种面向对象的解释型计算机程序设计语言 我们分解下Python的定义,主要是要理解面向对象...

2156
来自专栏吴伟祥

学习数据结构的原因&方法 原

761
来自专栏怀英的自我修炼

怀英漫谈2-JS语法初涉

今天碰了一下JS的语法,想与你聊聊这个。这篇文章适合前端设计师,不过在文末,我也为你准备了一些感悟,有兴趣的不妨跳到最后一看。 总体来看,JS的语法和Java的...

37910
来自专栏蜉蝣禅修之道

Apriori算法的Python实现

2764
来自专栏Petrichor的专栏

pytorch: tensor类型的构建与相互转换

其中,torch.Tensor、torch.rand、torch.randn 均默认生成 torch.FloatTensor型 :

2326
来自专栏程序员互动联盟

【面试宝典】谈谈面向对象

面试官:知道面向对象吧。 小白:嗯,知道,面想对象就是封装继承多态呀。 面试官:回答了一部分,还能谈谈除了封装、继承、多态之外的吗,比如说怎么抽象,抽象的思想是...

4078
来自专栏C语言及其他语言

【每日一题】1443 [蓝桥杯][历届试题]数字游戏

每日一题,一年365天,想不成为大神都难! 题目描述 栋栋正在和同学们玩一个数字游戏。 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数...

3055
来自专栏程序员互动联盟

到底能不能越过C直接学C++?

现在有好多人都比较迷茫,学习C++是不是需要先学习C语言? 其实这个问题不难,就是直接了解两者的联系和区别就可以给出答案。下面我们来看看他俩到底有什么关系。 ?...

4224
来自专栏算法修养

一道数据处理的算法题

有一份5000万个用户的数据,有一份2亿个用户看电影的记录。只有1G的内存,找到看电影最多的前1000个用户? 应该怎么做呢? 我一开始的想法,哎呀,快速排序!...

3636

扫码关注云+社区

领取腾讯云代金券