![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis源码设计思想
?py
积跬步,至千里,漫漫C艹路,且行且珍惜
展开
-
redis源码设计思想(二)柔性数组与前缀管理单元
以上是redis sdshdr8 的简化版本,其中的buf就是字符的柔性数组,sizeof(sdshdr8)得到的结果不包含buf,由于buf在结构体的末尾,因此结构体申请的额外的内存即为buf的大小,len为当前已经使用的大小,alloc表示申请的buf的总大小,8位的flags表示type,buf存储字符,那么初始化是申请的大小应该为sizeof(sdshdr8)+buf_len+1,额外一个字节存储’\0’。原创 2023-12-21 11:05:41 · 576 阅读 · 0 评论 -
redis源码设计思想(一)用C++设计,用C语言实现
在进行对象设计时,我们往往倾向于将对象的操作写作成员函数,操作的类容是对象的某些特性,这样便于阅读和理解,如定义人这个类,肚子里食物的质量和位置是人的特性,那么成员函数eat和walk就是改变这两个特性的成员函数。根据对象模型,成员函数与类绑定,与对象无关,编译后对象的成员变量作为传参传给成员函数,不使用多态的成员函数效率与非成员函数效率一致,编译时会对函数进行重命名,使用多态由于虚函数表指针的存在会占用额外的空间和额外的时间初始化。redis选择了折中的方案,即放弃多态的面向对象+C语言。原创 2023-12-21 10:10:28 · 356 阅读 · 0 评论