關於uthash 的初步原始碼閱讀

2021-10-09 09:37:55 字數 1087 閱讀 7900

uthash 這個開源庫使用起來很方便,只有乙個標頭檔案(uthash .h),在源**中只要包含這個標頭檔案就可以進行使用了這個裡面的介面

針對使用在網路上能夠搜尋到的示例**比較多。這裡就是記錄一些不一樣的地方。

(1)使用者結構體

struct my_struct ;
使用者定義的結構體中需要包含這個ut_hash_handle,這個元素,這個元素將會在庫的內部使用

(2)head

庫提供的函式都會有乙個head節點,這個實際上也是乙個指標,這個指標相當於鍊錶的頭或者陣列結構體,在這個head新增之後的節點,搜尋的時候就只會搜尋head下面的節點

首先是這個結構體

typedef struct ut_hash_handle  ut_hash_handle;
typedef struct ut_hash_table  ut_hash_table;
buckets—陣列的位址,存放這個head下面的成員

num_buckets—陣列的大小

log2_num_buckets—陣列的大小的log

num_items—暫時不清楚

tail----新增的最後乙個元素

hho----節點的hh和節點的偏差

ut_hash_handle結構在使用者結構中的偏移位置,通過ut_hash_handle物件減去hho定位到使用者結構物件

ideal_chain_maxlen—暫時不涉及

nonideal_items—暫時不涉及

.ineff_expands—暫時不涉及

noexpand—暫時不涉及

signature--------0xa0111fe1

typedef struct ut_hash_bucket  ut_hash_bucket;
ut_hash_handle – 存放節點

count----當前這個位置的節點個數

expand_mult—暫時不涉及

typeof的用法

把y定義成x指向的資料型別:

typeof(*x) y;

SynchronousQueue原始碼閱讀心得

synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...

Vector和Hashtable原始碼閱讀與理解

vector是執行緒安全的arraylist public synchronized void insertelementat e obj,int index ensurecapacityhelper elementcount 1 system.arraycopy elementdata,index...

seata xid是什麼 seata原始碼閱讀筆記

seata原始碼閱讀筆記 本文基於v0.8.0版本,本文沒貼 seata中的三個重要部分 tc 事務協調器,維護全域性事務和分支事務的狀態,驅動全域性提交或回滾,就是seata的服務端。tm 事務管理器,開始全域性事務,提交或回滾全域性事務。rm 資源管理器,管理正在處理的分支事務的資源,向tc註冊...