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

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

HashTable是Zend引擎中最重要、使用最廣泛的數(shù)據(jù)結(jié)構(gòu),它被用來存儲(chǔ)幾乎所有的東西。
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; // 整個(gè)HashTable的雙鏈表
 struct bucket *pNext;  // pNext和pLast用于組成某個(gè)hash對(duì)應(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初始化時(shí)指定,銷毀Bucket時(shí)調(diào)用
 zend_bool persistent;  // 是否采用C的內(nèi)存分配例程
 unsigned char nApplyCount;
 zend_bool bApplyProtection;
#if ZEND_DEBUG
 int inconsistent;
#endif
} HashTable;

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


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

主站蜘蛛池模板: 日韩a无v码在线播放免费 | 欧美精品亚洲精品日韩专区 | 五月激情片 | 亚洲欧美一级视频 | 91插插插网站 | 91视频国产精品 | 久久精品国产99国产精品 | 亚洲视屏一区 | 女人被免费视频网站 | 婷婷影院在线综合免费视频 | 亚洲日本中文字幕在线2022 | 视频一区 精品自拍 | 日本久久精品 | 久久艹综合 | 国产美女白丝袜精品_a不卡 | 天天成人| 性欧美video另类3d | 婷婷六月久久综合丁香可观看 | 香蕉成人啪国产精品视频综合网 | 一级做a级爰片性色毛片视频 | 国产成人禁片在线观看 | 欧美人禽杂交狂配在线观看视频 | 免费午夜视频 | 日日摸人人看97人人澡 | 亚洲一区亚洲二区亚洲三区 | 丁香六月在线 | 深爱五月综合网 | 国产一二三区在线观看 | wwwxx欧美 | 一级做a爰片性色毛片男 | 国产美女毛片 | 欧美高清狂热视频60一70 | 桃花阁成人网在线观看 | 久久香蕉热 | 国产福利91精品一区二区三区 | 亚洲人体一区 | 99性趣网 | 久久精品a国产一级 | 69精品视频| 思思玖玖玖在线精品视频 | 青草资源站 |