W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
每個?sds.h/sdshdr
?結(jié)構(gòu)表示一個 SDS 值:
struct sdshdr {
// 記錄 buf 數(shù)組中已使用字節(jié)的數(shù)量
// 等于 SDS 所保存字符串的長度
int len;
// 記錄 buf 數(shù)組中未使用字節(jié)的數(shù)量
int free;
// 字節(jié)數(shù)組,用于保存字符串
char buf[];
};
圖 2-1 展示了一個 SDS 示例:
free
?屬性的值為?0
?, 表示這個 SDS 沒有分配任何未使用空間。len
?屬性的值為?5
?, 表示這個 SDS 保存了一個五字節(jié)長的字符串。buf
?屬性是一個?char
?類型的數(shù)組, 數(shù)組的前五個字節(jié)分別保存了?'R'
?、?'e'
?、?'d'
?、?'i'
?、?'s'
?五個字符, 而最后一個字節(jié)則保存了空字符?'\0'
?。SDS 遵循 C 字符串以空字符結(jié)尾的慣例, 保存空字符的?1
?字節(jié)空間不計算在 SDS 的?len
?屬性里面, 并且為空字符分配額外的?1
?字節(jié)空間, 以及添加空字符到字符串末尾等操作都是由 SDS 函數(shù)自動完成的, 所以這個空字符對于 SDS 的使用者來說是完全透明的。
遵循空字符結(jié)尾這一慣例的好處是, SDS 可以直接重用一部分 C 字符串函數(shù)庫里面的函數(shù)。
舉個例子, 如果我們有一個指向圖 2-1 所示 SDS 的指針?s
?, 那么我們可以直接使用?stdio.h/printf
?函數(shù), 通過執(zhí)行以下語句:
printf("%s", s->buf);
來打印出 SDS 保存的字符串值?"Redis"
?, 而無須為 SDS 編寫專門的打印函數(shù)。
圖 2-2 展示了另一個 SDS 示例:
"Redis"
?。buf
?數(shù)組分配了五字節(jié)未使用空間, 所以它的?free
?屬性的值為?5
?(圖中使用五個空格來表示五字節(jié)的未使用空間)。接下來的一節(jié)將詳細地說明未使用空間在 SDS 中的作用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: