京峰二進(jìn)制安全逆向高級(jí)班錄播課程(反匯編加密解密病毒分析)
這種簡(jiǎn)單的字符串表示,在大多數(shù)情況下都能滿足要求,但是,它并不能高效地支持長(zhǎng)度計(jì)算和追加(append)這兩種操作:
每次計(jì)算字符串長(zhǎng)度(
strlen(s)
)的復(fù)雜度為 O(N)。對(duì)字符串進(jìn)行 N 次追加,必定需要對(duì)字符串進(jìn)行 N 次內(nèi)存重分配(
realloc
)。
而redis除了要處理c語言字符串之外,還需要處理redis的服務(wù)器協(xié)議等等。所以,redis實(shí)現(xiàn)的sds(簡(jiǎn)單動(dòng)態(tài)字符串),是二進(jìn)制安全的。
數(shù)據(jù)結(jié)構(gòu)的定義如下:
typedef char *sds; ? ?
?struct sdshdr { ?
? ?// buf 已占用長(zhǎng)度 ?
? ?int len; ?
? ?// buf 剩余可用長(zhǎng)度 ?
? ?int free; ?
? ?// 實(shí)際保存字符串?dāng)?shù)據(jù)的地方 ?
? ?char buf[]; ?
}; ?
標(biāo)簽: