因為C語言字符串存在問題:
- 獲取字符串長度需要進行運算(獲取字符串長度需要遍歷整個字符串,直到遇到終止符 \0,時間復雜度為 O(n))
- 非二進制安全(結束標識符\0可能在一些二進制格式的數據處理時字符串時產生錯誤)
- 不可修改(C 語言字符串在每次增長或縮短時都需要重新分配內存)
在 Redis 的 簡單動態字符串(Simple Dynamic String, SDS) 中?
- 結構體中直接保存了字符串的長度信息,可以在 O(1) 時間復雜度內獲取字符串長度。
- (支持動態擴容)在字符串修改前會檢查是否需要進行內存擴展
- (減少內存分配次數)進行空間預分配和惰性空間釋放策略,減少了頻繁的內存分配
- (二進制安全)通過記錄字符串的實際長度來確保二進制數據的安全存儲