国产性生交xxxxx免费-国产中文字幕-啊灬啊灬啊灬快灬高潮了,亚洲国产午夜精品理论片在线播放 ,亚洲欧洲日本无在线码,色爽交视频免费观看

鍋爐信息網(wǎng) > 鍋爐知識 > 鍋爐百科

redis sds

發(fā)布時間:

參考內(nèi)容:要懂redis,首先得看懂sds(全網(wǎng)最細(xì)節(jié)的sds講解) - 掘金 (juejin.cn)簡單動態(tài)字符串 — Redis 設(shè)計與實現(xiàn) (redisbook.readth

參考內(nèi)容:

  • 要懂redis,首先得看懂sds(全網(wǎng)最細(xì)節(jié)的sds講解) - 掘金 (juejin.cn)
  • 簡單動態(tài)字符串 — Redis 設(shè)計與實現(xiàn) (redisbook.readthedocs.io)

redis 中以 sds (simple dynamic string,簡單動態(tài)字符串)來表示字符串(既是 redis 中一種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),也是 redis 內(nèi)部用于代替 c 語言中 char* 的數(shù)據(jù)結(jié)構(gòu))。

sds 定義

//定義了一個char 指針ntypedef char *sds;nn/* Note: sdshdr5 is never used, we just access the flags byte directly.n * However is here to document the layout of type 5 SDS strings. */nnstruct __attribute__ ((__packed__)) sdshdr5 {n unsigned char flags;n char buf[];n};nn//__attribute__ ((__packed__)) 代表structure 采用手動對齊的方式。nstruct __attribute__ ((__packed__)) sdshdr8 {n uint8_t len; // 已占用內(nèi)存單位長度n uint8_t alloc; //buf 分配的長度,等于buf[]的總長度-1,因為buf有包括一個/0的結(jié)束符,即總共可用內(nèi)存單位長度n unsigned char flags; //只有3位有效位,因為類型的表示就是0到4,所有這個8位的flags 有5位沒有被用到n char buf[]; // 數(shù)據(jù)實際的內(nèi)存空間n};n// 與上面的變化只有 len 和 alloc,使用了 uint16_t, uint32_t, unit64_tnstruct __attribute__ ((__packed__)) sdshdr16 {n ...n};nstruct __attribute__ ((__packed__)) sdshdr32 {n ...n};nstruct __attribute__ ((__packed__)) sdshdr64 {n ...n};

sds 擴容

如果你有稍微看過一點 java 中 ArrayList 的實現(xiàn)的話,兩者的實現(xiàn)是類似的。在需要重新分配內(nèi)存時,如果所需的內(nèi)存不超過某個限制,那么分配兩倍的內(nèi)存,避免頻繁內(nèi)存分配,如果超過某個限制,那么只分配需要的內(nèi)存空間。

sds 內(nèi)存不對齊

內(nèi)存對齊:簡單的說,cpu 讀取內(nèi)存并不是以 byte 為單位的,通常以 64/32 位(也和 cache 的緩存行有關(guān)),內(nèi)存對齊就是將所用的內(nèi)存填補為讀取內(nèi)存單位的整數(shù)倍,下圖中的 pad 部分。

內(nèi)存不對齊的原因我認(rèn)為并不是一種技術(shù)問題,是一種設(shè)計的態(tài)度,worse is better,能夠較簡單的實現(xiàn)是最重用的。如果引入內(nèi)存對齊,那么需要在 32/64 位,以及不同的單位內(nèi)存長度的 sds 結(jié)構(gòu)做不同的調(diào)整,而且為了兼容 char*(sds 使用指針的一些操作兼容了 char* )指針直接指向數(shù)據(jù)的首位,而不利于獲取當(dāng)前的狀態(tài)(即移動指針,獲取 flag 內(nèi)容),做內(nèi)存對齊將會引入這一部分的工作使結(jié)構(gòu)變復(fù)雜。

原文鏈接:redis sds (kicey.site)

精選推薦

  • 711關(guān)東煮供應(yīng)商
    711關(guān)東煮供應(yīng)商

    今天給大家介紹三位,奶粉,全家、羅森這些便利店里關(guān)東煮的供應(yīng)商。店里賣三四塊錢一串的關(guān)東煮,在網(wǎng)上買不到,一塊錢就搞定。首先關(guān)東

  • 健康日歷|高壓鍋容易爆炸的4個原因
    健康日歷|高壓鍋容易爆炸的4個原因

    來源:醫(yī)藥養(yǎng)生保健報設(shè)計:李雅琴醫(yī)學(xué)審核:姜峰出品人:胡麗麗

  • 高爐
    高爐

    今天這活卻是個白事,等到了時辰,那家人便準(zhǔn)備火化,本來準(zhǔn)備送普爐,我卻心中一動,便對那家人說道:“這老人走也不要省,還是送高爐吧。”

  • 高壓鍋和電壓力鍋的區(qū)別,推薦幾款點壓力鍋
    高壓鍋和電壓力鍋的區(qū)別,推薦幾款點壓

    記得之前有一次去朋友家玩,他正在用高壓鍋煮小米粥,是的,高壓鍋壓小米粥,大概煮了半小時,高壓鍋突然爆炸了,現(xiàn)場慘不忍睹啊,幸好廚房里沒

0