Redis-壓縮表-ziplistDelete詳解

/* 刪除壓縮表zl中p指向的結點,返回刪除結點之後的壓縮表
刪除之後p指向p的下一個結點,這樣方便對鏈表結點進行迭代刪除 */
unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) {
    size_t offset = *p - zl;

    /*函數__ziplistDelete功能:從壓縮表zl中指針*p指向的結點開始刪除,連續刪除1個結點*/
    zl = __ziplistDelete(zl, *p, 1);

    /*在刪除結點的時候,可能會對zl的內存進行重分配(比如保存前置結點長度的內存空間需要擴容),
    所以利用offset首先記住p結點的位置,這樣在刪除結點之後,p指向的就是需要刪除的結點 之後的第一個結點 */
    *p = zl + offset;
    return zl;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章