contributed by <ryanwang522
>
text-align()
先利用 memset 將每個字元都寫為\0
,接著在呼叫 strncpy() 將所讀到的字串覆寫到 wbuf
中,使得每一行的加上 null-chracters 的總長度固定,方便使用 mmap()
利用 offset 的操作對映射在 memory 的 file 資料進行動作。
pthread_setconcurrency()
這裡我查了一下 Linux manual page
裡頭寫到在 linux 環境裡 concurrency level 並不影響程式執行,我把程式裡頭的函式去掉也發現執行情況並沒有太大差異,不知道有沒有地方弄錯@@
接著就是進行分配工作給每個 thread 的部份,比較特別的是這裡是直接 malloc 所有 entry 所需的記憶體,省去頻繁呼叫 malloc()
的 overhead,也是透過 text-align 所得到的效益。
findName()
的時間比較可以看出並沒有相差太多,依然需要 Linear search,時間複雜度為 O(n)。show_entry()
來檢查正確性,顯示只有 349896 個節點,看來是在相接的時候少接了原本的頭節點,將程式更改為:main.c
的可讀性pthread_setconcurrency()
的呼叫.h
檔宣告所需函式結構,在透過 function pointer 在 .c
檔進行實作。.h
.c
main.c
就可以直接進行同樣的呼叫,編譯時期不同執行檔會各自連結到相對應的函式實作,不必在透過頻繁的 #ifdef
來達到不同版本的運作main.c
,大部分程式碼都移植到對應的 .c 檔裡了!text_align()
移動到 Phonebook.append()
裡,所以測出來的時間才會暴增entry_pool
所指向的大空間