簡單動態字串
SDS(simple dynamic string)
結構:
struct sdshdr {
// 記錄buf陣列中已使用位元組的數量
// 等於SDS所儲存字串的長度
int len;
// 記錄buf陣列中未使用位元組的數量
int free;
// 字元陣列,用於儲存字串
char buf[];
}
特點:
1.空間預分配
a.len < 1MB,分配和len屬性同樣大小的未使用空間,如SDS的len將變成13位元組,程式也會分配13位元組的未使用空間,buf陣列的實際長度變成 13 + 13 + 1 = 27位元組(額外的一個位元組用於儲存空字元)。
b.len >= 1MB,程式會分配1MB的未使用空間,如SDS的len將變成30MB,將會分配1MB的未使用空間,SDS的buf陣列的實際長度為 30MB + 1MB + 1byte。
2.惰性釋放空間
當SDS的API需要縮短SDS儲存的字串時,程式並不會立即使用記憶體重分配來回收縮短後多出來的位元組,而是使用free樹形將這些位元組的數量記錄起來,並等待將來使用。
————摘自《redis設計與實現》 黃健宏 著
本作品採用《CC 協議》,轉載必須註明作者和本文連結