Redis 字符串實現:簡單動態字符串-SDS與C字符串的區別

2.1 SDS的定義

struct {
    //buf中已使用的字節數,等於SDS所保存字符串的長度
    int len;
    //buf中未使用的字節長度
    int free;
    //字節數組,用於保存字符串
    char[] buf;
}

2.2 SDS與C字符串的區別

C字符串 SDS
獲取字符串長度的複雜度爲 O(N) 獲取字符串長度的複雜度爲O(1)
API不安全,可能形成緩衝區溢出 API安全,杜絕了緩衝區溢出
修改字符串長度N次必然須要N次內存重分配 修改字符串長度N次最多發生N次內存重分配
只能保存文本 二進制安全,能夠保存文本和二進制數據
能夠使用全部<string.h>中的函數 兼容部分C字符串函數,可以使用部分<string.h>中的函數
相關文章
相關標籤/搜索