container of實現原理詳解

2021-09-18 05:09:02 字數 540 閱讀 2437

container_of在核心函式中經常使用,該函式的功能是根據乙個結構體成員的指標,返回這個成員指標所在的結構體的首指標。舉例說明如下:

struct std

;stuct std test;

int *p = &test.d;

container_of(p, stuct std,d) //這個函式將返回test變數的首位址,定義這個函式的目的是方便指標在驅動模組內部傳遞。

該函式實現巨集定義如下:

offsetof巨集定義的作用是計算乙個結構體成員距離結構體首部的編譯,由於結構體成員在記憶體中存放的位置滿足線性關係,位址從低到高一次增長,利用這個特性可以巧妙計算偏移。

將0位址強制轉換成我們需要的型別的指標,然後直接返回結構體成員的指標就是偏移,因為首位址是指向0位址的。

typeof是c語言關鍵字,是獲取該變數的型別作為型別定義,根據傳入的成員指標減去該成員在結構體中所佔的偏移就是該結構體的首位址。

container of巨集實現原理

ptr 指向例項化的結構體元素member的指標 type 是這個結構體型別 member 結構體中乙個元素的元素名 1 type 0 member 將0位址定義成乙個type型別指標,這個指標就可以訪問這個型別裡面的任意元素了 2 typeof type 0 member 得到這個元素的資料型別 ...

container of函式原理分析

container of cast a member of a structureout to the containing structure ptr the pointer to the member.指向成員變數的指標 type the type of the container struct...

container of 的的的原理

另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...