例說Linux核心鍊錶(一)

2021-09-07 10:31:01 字數 991 閱讀 9632

介紹

眾所周知,linux核心大部分是使用gnu c語言寫的。c不同於其它的語言,它不具備乙個好的資料結構物件或者標準物件庫的支援。

所以能夠借用linux核心源**樹的迴圈雙鏈表是一件非常值得讓人高興的事。

在include/linux/list.**件裡用c實現了乙個好用的迴圈鍊錶。它是有效並且易於操作的,否則它也不會被核心使用(譯者注:在kernel中大量的使用了迴圈雙鏈表結構。比方在在程序描寫敘述符實體中我們就能夠看到非常多struct list_head的身影)。無論何時。依靠這樣的結構,在核心中都能夠將不論什麼使用它資料結構串起來。僅僅須要一點點改動我們就能夠使用這個鍊錶(去除一些硬體prefetching的條目)。

優勢①資料型別不受限制

你能夠使用不論什麼資料型別,包括struct list_head就能夠把你的資料結構串聯起來。

②可移植性好

鍊錶使用不受平台限制。

③好用初始化煉表頭、訪問節點等的api已經留好了。

④可讀性好

在鍊錶的實現過程中使用了macros 和 inlined 函式,使**更加優雅和可讀。

⑤節省時間

鍊錶具有非常好的通用性,所以能夠不必反覆的建立新的鍊錶結構。

linux核心實現的鍊錶不同於你所見的其它的鍊錶,通常我們見到的鍊錶節點會包括我們須要鏈結的資料結構。例如以下:

struct my_list;
可是在核心中的鍊錶卻是將鍊錶節點放在了我們須要鏈結的資料結構中如:

struct my_cool_list;

注意:

1,鍊錶是在你想要鏈結的資料結構中的。

2,你能夠把鍊錶struct list_head放在你想要鏈結的資料結構的任何位置;

3。你能夠隨意命名struct list_head變數;

4。你能夠擁有非常多鍊錶。

由於時間太晚了,詳細的例項放在例說linux核心鍊錶(二)中翻譯並解說。

linux核心鍊錶

鍊錶是一種常用的資料結構,它通過指標將一系列資料節點連線成一條資料鏈。相對於陣列,鍊錶具有更好的動態性,建立鍊錶時無需預先知道資料總量,可以隨機分配空間,可以高效地在鍊錶中的任意位置實時插入或刪除資料。鍊錶的開銷主要是訪問的順序性和組織鏈的空間損失。一 鍊錶結構 單鏈表結構如下 雙鏈表結構如圖 st...

linux核心鍊錶

include include struct list head struct mylist void list add struct list head new,struct list head prev,struct list head next void list add tail struc...

Linux核心鍊錶

核心鍊錶 核心鍊錶即,我麼在乙個鍊錶中插入或刪除乙個資料,都需要自己編寫 相當的麻煩,怎麼解決這個問題呢,為了更加方便的解決這個問題,linux中就產生了核心鍊錶,以後想要在鍊錶中插入資料或刪除資料時,只需要呼叫函式就可以了。鍊錶對比 鍊錶是一種資料結構,他通過指標將一系列的資料節點連線成一條資料鏈...