原文:offsetof與container_of宏[總結]

前言 今天在看代碼時,遇到offsetof和container of兩個宏,覺得很有意思,功能很強大。offsetof是用來判斷結構體中成員的偏移位置,container of宏用來根據成員的地址來獲取結構體的地址。兩個宏設計的很巧妙,值得學習。linux內核中有着兩個宏的定義,並在鏈表結構中得到應用。不得不提一下linux內核中的鏈表,設計的如此之妙,只需要兩個指針就搞定了。后續認真研究一下這 ...

2013-12-12 23:53 7 17873 推薦指數:

查看詳情

(轉)offsetofcontainer_of[總結]

1、前言   今天在看代碼時,遇到offsetofcontainer_of兩個,覺得很有意思,功能很強大。offsetof是用來判斷結構體中成員的偏移位置,container_of用來根據成員的地址來獲取結構體的地址。兩個設計的很巧妙,值得學習。linux內核中有着兩個的定義,並在鏈表 ...

Fri Dec 13 16:54:00 CST 2013 0 4246
container_of學習筆記

最近在學習c語言編程,看到了container_of,深入學習了一天,做個筆記留念。 1、看一下書上寫的container_of的版本: 2、舉一個實例: 替換后的結果: 如果替換后的結果你還能看懂,說明你是真明白了,呵呵,有沒有興趣自己寫一遍 ...

Thu Oct 19 16:32:00 CST 2017 0 8569
offsetof的實現

1、c語言的結構體中,因為字節對齊的問題,導致成員地址並不能根據類型的大小進行計算。例如: 2、offsetof的實現如下: 哈哈,復雜吧,解釋一下:由於造成空洞的對齊動作是由編譯器負責完成的,這里有一個欺騙編譯器的指令:((TYPE *)0), 意思是定義一個 ...

Wed Oct 18 18:22:00 CST 2017 0 1802
關於container_of函數分析

View Code (一).分析下定義1: #define offset_of(type,member) ((int)&(((type *)0)->member)) (type * )0 :強制把0地址轉化為type *類型 ...

Fri Jan 04 21:33:00 CST 2019 0 637
#define container_of(ptr, type, member)

#define container_of(ptr, type, member) 輸入: 結構體一個成員的member地址ptr, 結構體的類型, 結構體一個成員member的名, 輸出: 得到這個結構體變量的地址; 分析: 結構體類型是確定的,結構體成員 相對 結構體定義的起始地址 偏移 ...

Fri May 07 20:02:00 CST 2021 0 2009
結構體之offsetof詳細解析

1、#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) 1.1 功能: 返回結構體TYPE中MEMBER成員相對於結構體首地址的偏移量,以字節為單位 ...

Wed May 11 23:55:00 CST 2016 0 2032
總結——和函數的區別。

今天總結一下和函數的區別,還有各自的優缺點。 在預處理階段會被編譯器替換掉,而且一般只做簡單的文本替換,編譯器對其不做任何的語法檢測。 定義時主要用於以下兩方面: 1、簡單文本或字符串的替換; 2、函數。 對於函數,我們可能比較陌生,下面舉例來介紹一下函數 ...

Mon Oct 23 21:28:00 CST 2017 0 6747
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM