linux2020
目的:
1
考慮到整數 PAGE_QUEUES
可能有以下數值:
給定 size_t offset
,試著將原本運算:
由於 PAGE_QUEUES
的數值分佈已知,在整數除法時,可思考加速運算的機制。需要注意,某些硬體平台缺乏整數除法指令 (如 Arm Cortex-A8),即使 Intel 公司出品的 Core 處裡器 Sandy Bridge 微架構中,針對 64 位元整數的除法運算,會佔用 40 到 103 個處理器週期,運算成本仍屬沈重。
來源: Agner Fog’s instruction tables,第 180 頁
於是我們可預先進行計算,從而避免整數除法指令的使用: (假設在 x86_64 硬體執行 GNU/Linux 並透過 gcc/clang 編譯)
其中 CASE
可能形如:
這樣的組合,請用最少的 case-break 敘述做出同等 size_t blockidx = offset / PAGE_QUEUES;
效果的程式碼。
參考資料:
作答區
CASE 至少該包含哪些數字: (複選)
(a)
2(b)
3(c)
4(d)
5(e)
6(f)
7(g)
8(i)
9(j)
10延伸問題: