|
HashTable是Zend引擎中最重要、使用最廣泛的數(shù)據(jù)結(jié)構(gòu),它被用來存儲幾乎所有的東西。
1.2.1 數(shù)據(jù)結(jié)構(gòu)
HashTable數(shù)據(jù)結(jié)構(gòu)定義如下:
復制代碼 代碼如下:
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對應
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;
HashTable中包含兩種數(shù)據(jù)結(jié)構(gòu),一個鏈表散列和一個雙向鏈表,前者用于進行快速鍵-值查詢,后者方便線性遍歷和排序,一個Bucket同時存在于這兩個數(shù)據(jù)結(jié)構(gòu)中。
關于該數(shù)據(jù)結(jié)構(gòu)的幾點解釋:
鏈表散列中為什么使用雙向鏈表?
一般的鏈表散列只需要按key進行操作,只需要單鏈表就夠了。但是,Zend有時需要從鏈表散列中刪除給定的Bucket,使用雙鏈表可以非常高效的實現(xiàn)。
nTableMask是干什么的?
這個值用于hash值到arBuckets數(shù)組下標的轉(zhuǎn)換。當初始化一個HashTable,Zend首先為arBuckets數(shù)組分配nTableSize大小的內(nèi)存,nTableSize取不小于用戶指定大小的最小的2^n,即二進制的10*。nTableMask = nTableSize
主站蜘蛛池模板:
久久久久久久久女黄9999
|
麻豆精品人妻一区二区三区蜜桃
|
漂亮的保姆6在线观看中文
漂亮的保姆5电影免费观看完整版中文
|
99久久久无码国产精品AAA
|
99久久精品费精品国产
|
亚洲AV成人片色在线观看网站
|
久久99亚洲AV无码四区碰碰
|
精品视频免费在线
|
69精品人妻一区二区三区蜜桃
|
精油按摩日本
|
日韩丰满少妇无码内射
|
无码日韩人妻精品久久蜜桃免费
|
日韩亚洲人成在线
|
在线va无卡无码高清
|
黄色a三级免费看
|
男插女高潮一区二区
|
丰满大屁俄罗斯肥女
|
最新国产麻豆精品
|
18国产精品白浆在线观看免费
|
99无人区码一码二码三
|
国产精品无码无卡毛片不卡视
|
囯产愉拍亚洲精品一区
|
国产AV电影区二区三区曰曰骚网
|
动听968|
久久午夜夜伦痒痒想咳嗽P
久久午夜夜伦鲁鲁片无码免费
|
国产极品白嫩超清在线观看
|
se01国产短视频在线观看
|
伦理79电影网在线观看
|
夜色福利院在线观看免费
|
黑人性xxx
|
24小时日本在线观看片
|
亚洲性无码av在线
|
狠狠色狠狠色综合日日小说
|
最近高清中文字幕无吗免费看
|
国语自产精品一区在线视频观看
|
国产传媒18精品A片在线观看
|
无码AV动漫精品一区二区免费
|
特级黑人三人共一女
|
亚洲人成网站在线播放
|
蜜芽手机在线观看
|
中文字幕s级优女区
|