SDS 动态字符串

SDS定义
struct sdshdr {
    int len
    int free
    char buf[];
}
  • free: 剩余空间大小
  • len: 字符串长度
  • buf: 字符串内容
    SDS 与C语言字符串区别
  • 常数复杂度获取字符串长度
  • 杜绝缓冲区溢出:API会检查SDS的空间是否满足修改所需要求,如果不满足的话,会自动将SDS空间扩展至 所需空间大小,然后再执行实际修改操作。
  • 减少修改字符串时带来的内存重新分配次数:
    • 空间预分配
      • 如果SKS修改之后,长度小于1M,程序分配和len同样大小的未使用空间,len和free相同
      • 如果修改后长度大于等于1M,程序会分配1M的未使用空间,
    • 惰性释放空间
      • 缩短SKS的字符串时,不会立即释放free。需要时再释放
  • 二进制安全
    • C语言字符串除结尾外不能出现空格
  • 兼容部分C字符串函数

results matching ""

    No results matching ""