1、前言 今天在看代碼時,遇到offsetof和container_of兩個宏,覺得很有意思,功能很強大。offsetof是用來判斷結構體中成員的偏移位置,container_of宏用來根據成員的地址來獲取結構體的地址。兩個宏設計的很巧妙,值得學習。linux內核中有着兩個宏的定義,並在鏈表 ...
c語言的結構體中,因為字節對齊的問題,導致成員地址並不能根據類型的大小進行計算。例如: offsetof宏的實現如下: 哈哈,復雜吧,解釋一下:由於造成空洞的對齊動作是由編譯器負責完成的,這里有一個欺騙編譯器的指令: TYPE , 意思是定義一個指向TYPE類型的指針,且該指針值 也就是該type類型的地址 為 ,當然這是不可能引用成功的, 地址早已 被操作系統保護起來了: ,那么這么做意義何在 ...
2017-10-18 10:22 0 1802 推薦指數:
1、前言 今天在看代碼時,遇到offsetof和container_of兩個宏,覺得很有意思,功能很強大。offsetof是用來判斷結構體中成員的偏移位置,container_of宏用來根據成員的地址來獲取結構體的地址。兩個宏設計的很巧妙,值得學習。linux內核中有着兩個宏的定義,並在鏈表 ...
1、#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) 1.1 功能: 返回結構體TYPE中MEMBER成員相對於結構體首地址的偏移量,以字節為單位 ...
1、前言 今天在看代碼時,遇到offsetof和container_of兩個宏,覺得很有意思,功能很強大。offsetof是用來判斷結構體中成員的偏移位置,container_of宏用來根據成員的地址來獲取結構體的地址。兩個宏設計的很巧妙,值得學習。linux內核中有着兩個宏的定義,並在鏈表 ...
,還是在一開始就被一個小小的 offsetof 宏搞暈了。 offsetof 宏 先來看看offsetof宏是 ...
https://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法匯總sizeof()功能:計算數據空間的字節數1.與strlen()比較 ...
今天為大家分享一篇C語言#define拼接宏定義實現方式,具有很好的參考價值,希望對大家有所幫助。 使用場合:拼接兩個宏,一個是傳入的宏。 遇到問題:普通的拼接宏定義,對於“傳入的宏”不會被替換,反而原封不動的接了上去。 解決方法:經過試驗以及網上查閱,以下方法即可以解決上述問題 ...
最大值,最小值 #define MAX( x, y ) ( (x) > (y) ? (x) : (y) )#define MIN( x, y ) ( (x) < (y) ? (x) : ...
Singleton 設計模式應用非常廣泛,實現起來也很簡單,無非是私有化若干個構造函數,“operator =” 操作符,以及提供一個靜態的創建和銷毀方法。但是對每個類都寫這些雷同的代碼是本座不能容忍的,因此,本座使用宏把整個 Singleton 模式封裝起來,無論是類的定義還是類的使用 ...