contributed by < ndsl7109256
>
此次作業主要編輯的部分其實只有 queue.c
和 queue.h
其他有趣的部分留在後面探討。
queue.h
在 queue.h 裡只更動了 queue_t 的 structure部分,在裡面加入一個指向指標 tail 的指標和一個 integer 的 size 。其目的主要為了達成 的 q_insert_tail 和 q_size 否則每次都必須遍尋整串 linked list 使時間複雜度變成 。
queue.c
q_free
如果 queue 存在的話,不斷檢查其 head 是否 NULL ,如果是就不斷切掉頭,再將 head 指向原本 head 的下一個 element。最後再 free 掉 queue 本身。
記得如果只 free head 本身,其裡面的 value 並不會 被一起 free 掉。要連同 value 一起做 free 的動作。
隔每個 1000000 個 element 測量 insert tail 和 計算 size 的時間
Element 數 | 1000000 | 2000000 | 3000000 | 4000000 |
---|---|---|---|---|
Delta time | 0.026 | 0.044 | 0.078 | 0.094 |
| Element 數 | 1000000 | 2000000 | 3000000 | 4000000 |5000000 | 6000000 |
| –––– | –––– | –––– |–––– | –––– | –––– |–––– | –––– |
| Delta time | 0.023 | 0.050 |0.067 | 0.088 | 0.0128 | 0.149 |
這裡發現每次所花的時間跟我們預期的還是有所差距,明顯會隨著 element 數而增加。
尚須思考為何有這樣的情形發生。
CPP check 靜態分析
Vargilind 動態分析
git stash?
oom killer
sat formal verification
sysprog
,2019spring