1.1 简单动态字符串

2018-07-27  本文已影响0人  9cc222f2bb0a

SDS:simple dynamic String

优势:

    1.提升效率,C语言的字符串如果需要知道字符串的长度,需要遍历,复杂度是O(n),而针对SDS,复杂度是O(1)

    2.杜绝缓冲区溢出。concat操作,C会直接在后面追加,这样就有可能在紧连着的字符串中导致后续的字符串被冲,而SDS在会检查是否有足够空间用于concat,没有的话则执行自己的API进行空间拓展

    3.减少修改字符串带来的内存重分配次数。每次内存分配涉及复杂的算法,可能会涉及到系统调用,所以是一个比较耗时的操作。一般程序中,修改字符串的情况不太多,所以可以接受,但是redis作为数据库,经常被用于速度快,修改快的场景中,为了解决这个问题,redis使用SDS来解决。

    4. 二进制安全。SDS使用len的属性值判断是否为空,而不是判断特殊字符。

SDS通过free,实现了空间预分配以及惰性空间释放

    1. 空间预分配。对SDS进行修改之后,如果长度小于M,则分配与len属性相同的大小作为free,如果大于1M,则分配1M。这种策略使得内存分配次数从必定N次降低为最多N次。

    2. 惰性空间释放。如果释放空间,仅仅移除字符串,并不触发内存重新分配。

上一篇下一篇

猜你喜欢

热点阅读