---
# System prepended metadata

title: 2023q1 Homework4 (quiz4)
tags: [Linux核心實作]

---

---
title: 2023q1 Homework4 (quiz4)
tags: Linux核心實作
---

# 2023q1 Homework4 ([quiz4](https://hackmd.io/@sysprog/linux2023-quiz4))
contributed by < [`lorian0738`](https://github.com/lorian0738) >

## 紅黑樹

### 疑問


* #### [紅黑樹的移除](https://hackmd.io/@sysprog/linux-rbtree#%E7%B4%85%E9%BB%91%E6%A8%B9%E7%9A%84%E7%A7%BB%E9%99%A4)
    有許多 Case，但看不懂，或許會有完整程式碼？
* #### [紅黑樹節點](https://hackmd.io/@sysprog/linux-rbtree#%E7%B4%85%E9%BB%91%E6%A8%B9%E7%AF%80%E9%BB%9E)
    為何 struct rb_node 對齊 sizeof(long) 後，指標最低 2 個位元就會沒有使用到？
    
### 小筆記

* [container_of or rb_entry](https://hackmd.io/@sysprog/linux-rbtree#container_of-or-rb_entry)
    這部分提到使用 container_of 或 entry 的情形，第一次作業這邊也用得有點混亂
    1.　container_of：存取節點的 container structure 時
    2.　XXXX_entry：存取節點 container structure 裡的 member

## [前置處理器應用篇](https://hackmd.io/@sysprog/c-preprocessor)

### 小筆記
* 前置處理器 = 展開的操作

* 產生前置處理器的 code
`gcc -E -P objects.c > out.c`
其中 -E 表示在前置處理器的時候停下來
-P 表示直接展開 prototype 那些資訊

* 找某份程式碼是被誰用到
`grep "use-models.h" *`

* 了解專案規模
1. 先清除 output 檔案
1. 再用 make clean 把不必要的東西清除
1. `cloc .`：其中 cloc 用來計算規模， . 則表示在當前目錄下執行

## 測驗 1


## 測驗 2

## 測驗 3