:warning: 作業須知
+
[加法], -
[減法], *
[乘法], ^
, &
[逐位元 AND] 等等) 和運算元 (operand) 之間用一個空白字元 (不多不少!) 區隔,如 (v >> c)
、逗點 (,
) 後應該有空白或換行符號,並避免非必要的小括號 (即 (
和 )
),也該刪去 (trim) 起始/結尾的空白字元
<embedded.master2015@gmail.com>
),通知課程事宜和提供電子書考慮 S-Tree名稱沒特別意思,不用去Google搜尋 是個嘗試兼具 AVL tree 和 red-black tree 部分特性的 binary search tree (BST) 實作,著重在快速的 insert/delete 操作且合理的 lookup 速度。
測試情境為:
參考輸出如下:
[ After insertions ]
0
4
7
9
10
12
13
14
15
16
17
18
20
21
22
24
26
27
29
34
35
36
38
40
42
43
44
46
48
50
51
54
55
56
57
58
64
66
67
69
70
74
76
77
78
79
80
81
84
85
87
91
92
94
95
97
98
Removing...
52 65 76 30 44 90 16 70 14 93
80 12 93 6 67 70 48 32 40 89
31 90 10 42 75 75 42 5 20 37
80 72 1 57 2 45 47 16 17 61
10 95 73 4 2 39 73 48 71 14
39 3 5 47 45 78 21 85 81 42
23 62 13 22 19 13 68 66 30 83
26 38 77 97 43 79 37 15 26 7
27 65 8 32 14 51 9 35 38 88
75 59 51 87 82 68 98 51 33 27
[ After removals ]
0
18
24
29
34
36
46
50
54
55
56
58
64
69
74
84
91
92
94
注意到以下特性:
[ After removals ]
的輸出不包含 Removing
指定的數值原始程式碼可見 main.c (部分遮蔽)
作答規範:
AAAA
, BBBB
, CCCC
, DDDD
, EEEE
, FFFF
, GGGG
均該包含 st_
開頭的函式或巨集,且不包含 ;
字元延伸問題:
以下程式碼可針對給定的 alignment 數值,輸出大於等於 alignment 的記憶體對齊地址:
#include <stdint.h>
static inline uintptr_t align_up(uintptr_t sz, size_t alignment)
{
uintptr_t mask = alignment - 1;
if ((alignment & mask) == 0) { /* power of two? */
return MMMM;
}
return (((sz + mask) / alignment) * alignment);
}
已知 alignment 不為 0
,參考執行輸出:
align_up(120, 4) = 120
align_up(121, 4) = 124
align_up(122, 4) = 124
align_up(123, 4) = 124
請填補上述 MMMM
標注的程式碼,使得執行結果符合預期。限制只能用 +
, -
, |
, &
, ^
, ~
, <<
, >>
等運算子,不得出現 ternary conditional operator (即 ?
搭配 :
),且不該出現 alignment
必須符合 .clang-format 規範的程式碼排版風格
延伸問題:
align_up
的程式碼,並舉例說明其用法搭配 並行和多執行緒程式設計
考慮用 POSIX Thread 改寫的 qsort(3p) 實作,測試程式用法:
usage: qsort-mt [-stv] [-f forkelements] [-h threads] [-n elements]
-l Run the libc version of qsort
-s Test with 20-byte strings, instead of integers
-t Print timing results
-v Verify the integer results
Defaults are 1e7 elements, 2 threads, 100 fork elements
選項 -l
可指定使用 glibc (或系統預設的 libc) 的 qsort
。原始程式碼可見 qsort-mt.c (部分遮蔽)
編譯方式:
$ gcc -Wall -o qsort qsort_mt.c -lpthread
請補完程式碼,使其運作符合預期。作答規範:
HHHH
和 JJJJ
都包含 pthread_
開頭的函式,且均不包含 ;
字元延伸問題:
回答上述測驗題 linux2023-summer-quiz
),並依據下方格式來答覆延伸問題:
##
開頭並標注題目,如 ## 測驗
書寫規範:
延伸閱讀: