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註冊...