|
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
主站蜘蛛池模板:
高hh乱亲女真实
|
天龙八部慕容属性加点
|
九九热免费在线观看
|
麻豆高潮AV久久久久久久
|
日韩亚洲中文欧美在线
|
久久精品国产亚洲AV影院
|
红桃传媒少妇人妻网站无码抽插
|
97人妻久久久精品系列A片
|
在线观看亚洲AV无码每日更新
|
欲香欲色天天综合和网
|
国产成人女人视频在线观看
|
偷拍亚洲制服另类无码专区
|
男人就爱吃这套下载
|
伸进同桌奶罩里摸她胸作文
|
深夜草逼逼
|
手机国产视频福利
|
晓雪老师我要进你里面好爽
|
阿离被扒开双腿疯狂输出
|
男人把女人桶到高潮嗷嗷叫
|
国产麻豆福利AV在线观看
|
亚洲综合AV在线在线播放
|
国产亚洲欧美在线中文BT天堂网
|
激情床戏视频片段有叫声
|
久久精品国产亚洲AV麻豆欧美玲
|
亚洲色欲色欲www474ee
|
国产欧美日韩国产高清
|
欧美尤物射精集锦
|
日本19禁啪啪吃奶大尺度
|
国产二级一片内射视频播放
|
国内精品久久久久影院亚洲
|
亚洲a视频在线观看
|
肉蒲团从国内封禁到日本成经典
|
中文字幕在线免费视频
|
香蕉97超级碰碰碰碰碰久
|
99视频在线免费看
|
日本真人啪啪试看30秒
|
神马影院午夜伦理限级
|
午夜伦理网
|
国产毛片A级久久久不卡精品
|
日韩精品无码视频一区二区蜜桃
|
国产在线高清视频
|