色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

Hi,歡迎來到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見教育科技集團(tuán)<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > 揭開linux內(nèi)核中container_of的神秘面紗
揭開linux內(nèi)核中container_of的神秘面紗
時(shí)間:2016-12-22作者:華清遠(yuǎn)見

在linux 內(nèi)核中有一個(gè)大名鼎鼎的宏container_of(),這個(gè)宏是用來干嘛的呢?我們先來看看它在內(nèi)核中是怎樣定義的。

呵呵,乍一看不知道是什么東東。

我們先來分析一下container_of(ptr,type,member),這里面有ptr,type,member分別代表指針、類型、成員。看一個(gè)例子:

Struct test
        {
                int i;
                int j;
                char k;
        };
        Struct test temp;

現(xiàn)在呢如果我想通過temp.j的地址找到temp的首地址就可以使用container_of(&temp.j,struct test,j);

現(xiàn)在我們知道container_of()的作用就是通過一個(gè)結(jié)構(gòu)變量中一個(gè)成員的地址找到這個(gè)結(jié)構(gòu)體變量的首地址。

下面來看看比較復(fù)雜的內(nèi)容:

我們用上面的struct test張展一下

Const typeof(((struct test *)0)->j) * __mptr = (&temp.j);

其中,typeof是GNU C對(duì)標(biāo)準(zhǔn)C的擴(kuò)展,它的作用是根據(jù)變量獲取變量的類型。因此,上述代碼的作用是首先使用typeof獲取結(jié)構(gòu)體成員j的類型為int,然后頂一個(gè)int指針類型的臨時(shí)變量__mptr,并將結(jié)構(gòu)體變量中的成員的地址賦給臨時(shí)變量__mptr。

(struct test *)((char *)__mptr - offsetof(struct test,j));

接著我們來看一下offsetof(struct test,j),他在內(nèi)核中如下定義

展開(size_t)&((struct test *)0)->j,這是什么東東?

一開始也不明白,這里要感謝曹老師老師的熱心幫助,一語驚醒夢(mèng)中人,呵呵,可以是這樣理解。

其中size_t是整型,那么我們可以知道終的結(jié)果是一個(gè)整形值,也就是j相對(duì)于0地址的偏移量。也許現(xiàn)在你會(huì)問,整出這么個(gè)玩意干嘛,下面看個(gè)列子:

程序運(yùn)行結(jié)果:

發(fā)現(xiàn)沒有如果把第二個(gè)值 減去后一個(gè)值,就能得到第一個(gè)值。

在回首一下它:

(struct test *)((char *)__mptr - offsetof(struct test,j));

是不是可以獲得結(jié)構(gòu)體變量temp的首地址呀,是不是太精妙了呀,linux內(nèi)核中隨隨便便一個(gè)宏就有如此精妙,呵呵,想想對(duì)linux了解非常多的牛人,還有很長一段路。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 亚洲自拍偷拍色片视频| 亚洲精品一区二区在线| 亚洲欧美日韩一区二区三区在线| 欧美美女18p| 成人妇女淫片aaaa视频| 久久精品在线播放| 国产精品女人网站| 日韩一二三在线视频播| 国产精品国产三级国产aⅴ浪潮 | 国产一区红桃视频| 久久天堂电影网| 成人午夜两性视频| 欧美性xxxx在线播放| 亚洲激情 国产| 午夜精品久久久久久久久久久久久| 日韩精品高清在线| 青草成人免费视频| 色噜噜狠狠狠综合曰曰曰88av| 国产成人免费av| 久久6免费高清热精品| 成人激情春色网| 欧美激情国产精品| 国产午夜精品美女视频明星a级| 人妖精品videosex性欧美| 亚洲一区二区福利| 国产精品大陆在线观看| 欧美另类极品videosbestfree| 91亚洲国产成人精品性色| 久久久久久亚洲| 爽爽爽爽爽爽爽成人免费观看| 成人啪啪免费看| 97av在线视频| 伦伦影院午夜日韩欧美限制| 92版电视剧仙鹤神针在线观看| 91国偷自产一区二区三区的观看方式| 在线电影欧美日韩一区二区私密| 国产综合久久久久| 91地址最新发布| 欧美性生交大片免费| 色婷婷**av毛片一区| 亚洲精品久久久久中文字幕欢迎你 |