美文网首页
1.1 简单动态字符串

1.1 简单动态字符串

作者: 9cc222f2bb0a | 来源:发表于2018-07-27 21:17 被阅读0次

    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. 惰性空间释放。如果释放空间,仅仅移除字符串,并不触发内存重新分配。

    相关文章

      网友评论

          本文标题:1.1 简单动态字符串

          本文链接:https://www.haomeiwen.com/subject/fnxwcftx.html