contributed by <pine0113
>
q_new
假設 head 配置成功的機率比較高,將成功的情境放在前面
但感覺 這種程度的優化其實 compiler 就會處理掉才對
工程人員說話要精準,避免說「感覺」。
修正為 TODO:
測試配置成功情境放置在前後的效能差異
q_free
q_insert_head
commit 的時候發生以下錯誤訊息
發現是因為在建立 new_node 的時候少做了 INIT_LIST_HEAD
而在下方直接對鏈結串列進行操錯導致
避免非必要的項目縮排 (即 *
和 -
),以清晰、明確,且流暢的漢語書寫。
Bug: 第一次執行 q_insert_tail
時舊的資料並沒有保留在佇列中
由於原本自己寫的程式漏寫了一條指標賦值 導致的異常,改用 list_add
之後突然正常了回頭去比較兩者之間差異,
翻閱英漢辭典,assign 何時叫做「賦值」,此處就是指派,注意書寫。
q_insert_tail
用類似 q_insert_head
的方式完成
使用 list_add_tail
取代直接操作
q_remove_head
& q_remove_tail
char *sp, size_t bufsize
的用途待確認
目前只有使用 list_last_entry
跟 list_first_entry
將節點取出後使用 list_del
移除節點
根據 queue.h
的定義
由於 remove
與 delete
不同,所以被移除的字串需要複製到 *sp
避免非必要的項目縮排 (即 *
和 -
),以清晰、明確,且流暢的漢語書寫。
Bug: 目前有記憶體沒有正常釋放的問題
文字訊息避免用圖片來表示,否則不好搜尋和分類
修正:使用 list_del_ini
q_size
目前是作業要求內教學的版本尚未修改
q_ascend
& q_descend
使用同一個方式,把 head 視做左側、 tail 視作右側,
從右側往左側逐一確認是否需要將節點移除掉即可
q_delete_mid
在看快慢指標之前,就先寫了分別從前後往中間靠攏找中間點的方式。
目前不知道哪樣實作比較好,先列入 todo
TODO:
q_swap
q_reverse
q_reverseK
q_sort
q_merge
q_delete_dup
文字訊息避免用圖片來表示,否則不好搜尋和分類
pine0113
幾乎把佇列實作完才回頭看這個要求
發現自己之前在除錯的時候都是使用迂迴的將程式區塊刪除比對來找出錯的位置。 但是 core dump 或是 segmentation fault 這類記憶體出錯的問題理應直接使用分析工具直面問題、而非用大量的時間用不正確的工具來除錯
幻滅是成長的開始jservImage Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
TODO :作業說明的頭兩句 bottom up 跟 top down 的差異
* Linux 核心排序實作的演進 章節有完整說明
文字訊息避免用圖片來表示,否則不好搜尋和分類
此段文這樣列出來應該是四種實作 (3+開發者提出)
top-down、bottom-up、queue、開發者提出
TODO: 用以下檢查程式碼取代自己撰寫的相同用途程式碼前置檢查
看不懂以下區塊
c __attribute__((nonnull(2,3,4)))
* 看 vax-r
作業時發現他有寫到
> 首先 attribute((nonnull(2,3,4))) 可以參照 6.30 Declaring Attributes of Functions 的解說
> [name=pine0113]我看了他貼的連結後仍然不知道要如何由原本的程式找到對應的規格文件,這部分應該要在修正,從 gcc 文件上層也無法往下搜尋,應該是找尋的方法有問題
- [ ] 確認如何查詢 gcc 官方規格
https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/
發現自己有不想讀懂程式碼,想直接引用的傾向
避免非必要的項目縮排 (即 *
和 -
),以清晰、明確,且流暢的漢語書寫。
此處參考了 var-x 的 作法
修改 queue.c 加入 q_list_sort()
移除 priv
cmpfunc
不知道該怎麼寫
修改 queue.h 加入 q_list_sort
修改 qtest.c 加入 do_list_sort()
修改 qtest.c 加入 ADD_COMMAND(list_sort, "Sort queue with linux kernel sort", "");
error
在 queue.h 中加入
查詢 likely 的定義應該是在這裡,但在 queue.h 中 #include <linux/compiler.h> 會有以下錯誤,先用網路上找到的方法來繞過這個問題,但要目前還無法使用正確的 include 引入對應資源
pine0113
此處是使用暴力手寫引入,有考慮是否要用 include list_sort.c/h 的方式改 compiler make 的方法,但不知道實際要做哪些步驟
有看到 @chiangkd 的做法但尚未仔細閱讀
了解評估效能方式項目
評估效能實作
避免非必要的項目縮排 (即 *
和 -
),以清晰、明確,且流暢的漢語書寫。
在實作 swap 時要注意 :
node_1 總是在 node_2 之後
當兩個要交換的節點是相鄰時不要做 list_move(node_2, node_1_prev),因為 node_1_prev 等於 node_2,如果做了 list_move(node_2, node_1_prev) 會把 node_2 這個節點移除。
主要是自己寫出來的 swap 犯了上面說的這點的問題但是自己找不出原因
最後再看到他的筆記的時候才發現是這個問題…
執行 lab0 (D) 的測試程式
這邊在執行的時候由於沒有任何 output,只能等待結果
用 top 來觀察程式是否有在執行,但這沒辦法判斷是否正常執行
執行 lab0 (D) 的繪圖程式
在作業提示中有提到
在 oreparaz/dudect 的程式碼具備 percentile 的處理,但在 lab0-c 則無
https://github.com/oreparaz/dudect/blob/master/src/dudect.h
直接進程式碼看果然是完全看不懂的,但由於作業繳交時限將至,這邊將後續想要完成的項目列在下方:
根據作業要求這段文字,用搜尋的在檔案中搜尋不到 linenoiseEdit(),目前比對原始檔案後猜測應該是
linenoise.c
的 static int line_edit()
但比對程式碼後跟後面的描述感覺並不相符
上述程式碼已整合進 qtest,可在終端機執行以下命令:
嘗試執行 ./qtest 的 web 命令後
嘗試 curl http://localhost:9999/new
可以正常操作
以第一手材料為主,注意上述學員的筆記可能存在錯誤,你需要提出修正和調整。