一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

深入PHP中的HashTable結(jié)構(gòu)詳解

HashTable是Zend引擎中最重要、使用最廣泛的數(shù)據(jù)結(jié)構(gòu),它被用來存儲幾乎所有的東西。
1.2.1 數(shù)據(jù)結(jié)構(gòu)
HashTable數(shù)據(jù)結(jié)構(gòu)定義如下:
復(fù)制代碼 代碼如下:
typedef struct bucket {
 ulong h;    // 存放hash
 uint nKeyLength;
 void *pData;   // 指向value,是用戶數(shù)據(jù)的副本
 void *pDataPtr;
 struct bucket *pListNext; // pListNext和pListLast組成
 struct bucket *pListLast; // 整個HashTable的雙鏈表
 struct bucket *pNext;  // pNext和pLast用于組成某個hash對應(yīng)
 struct bucket *pLast;  // 的雙鏈表
 char arKey[1];    // key
} Bucket;

typedef struct _hashtable {
 uint nTableSize;
 uint nTableMask;
 uint nNumOfElements;
 ulong nNextFreeElement;
 Bucket *pInternalPointer; /* Used for element traversal */
 Bucket *pListHead;
 Bucket *pListTail;
 Bucket **arBuckets;   // hash數(shù)組
 dtor_func_t pDestructor; // HashTable初始化時指定,銷毀Bucket時調(diào)用
 zend_bool persistent;  // 是否采用C的內(nèi)存分配例程
 unsigned char nApplyCount;
 zend_bool bApplyProtection;
#if ZEND_DEBUG
 int inconsistent;
#endif
} HashTable;

總的來說,Zend的HashTable是一種鏈表散列,同時也為線性遍歷進行了優(yōu)化,圖示如下:


HashTable中包含兩種數(shù)據(jù)結(jié)構(gòu),一個鏈表散列和一個雙向鏈表,前者用于進行快速鍵-值查詢,后者方便線性遍歷和排序,一個Bucket同時存在于這兩個數(shù)據(jù)結(jié)構(gòu)中。
關(guān)于該數(shù)據(jù)結(jié)構(gòu)的幾點解釋:
鏈表散列中為什么使用雙向鏈表?
一般的鏈表散列只需要按key進行操作,只需要單鏈表就夠了。但是,Zend有時需要從鏈表散列中刪除給定的Bucket,使用雙鏈表可以非常高效的實現(xiàn)。
nTableMask是干什么的?
這個值用于hash值到arBuckets數(shù)組下標的轉(zhuǎn)換。當(dāng)初始化一個HashTable,Zend首先為arBuckets數(shù)組分配nTableSize大小的內(nèi)存,nTableSize取不小于用戶指定大小的最小的2^n,即二進制的10*。nTableMask = nTableSize

主站蜘蛛池模板: 亚洲一区二区免费视频 | 久久综合一区二区 | 91福利在线免费观看 | 美女把屁股扒开让男人桶视频 | 伊人俺去久久涩五月综合 | 精品亚洲一区二区三区 | 婷婷激情丁香 | 日本妞欧洲 | 色综合久久88色综合天天 | 精品视频免费在线观看 | 日韩美女一级毛片 | 91麻豆精品国产自产在线观看一区 | www.xxx欧美 | 91黄色在线 | 国产女人视频 | 91福利国产在线观看一区二区 | 久久精品国产亚洲婷婷 | 91美女在线播放 | 男女一级毛片 | 岛国一级毛片 | 久久精品123 | 一级久久久 | 精品久久久久亚洲 | 国产小视频在线看 | 91逼逼| 欧美性猛交xx免费看 | 99伊人| 亚洲精品tv久久久久 | 久久国产一区二区 | 欧美日韩亚洲精品国产色 | 91精品国产一区二区三区左线 | 亚洲一级毛片免费看 | 亚洲成a人片毛片在线 | 美女视频免费看一区二区 | 亚洲香蕉伊综合在人在线 | 国产日韩欧美一区二区三区视频 | 久久午夜夜伦伦鲁鲁片 | 欧美另类videosbestv| 国产拍在线 | 性欧美4k高清精品 | 国产成人精品高清在线观看99 |