• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            __attribute__ ((packed)) 的作用

            轉(zhuǎn)載自:http://hi.baidu.com/weipatty/item/b5a9964daab2f1aadf2a9fd4

            最近在看我們的代碼的時(shí)候發(fā)現(xiàn)聲明類型的時(shí)候有 __attribute__ ((packed))的結(jié)構(gòu)體類型聲明,不知道是什么意思,查了下知道是如下含義:

            1. __attribute__ ((packed)) 的作用就是告訴編譯器取消結(jié)構(gòu)在編譯過程中的優(yōu)化對(duì)齊,按照實(shí)際占用字節(jié)數(shù)進(jìn)行對(duì)齊,是GCC特有的語法。這個(gè)功能是跟操作系統(tǒng)沒關(guān)系,跟編譯器有關(guān),gcc編譯器不是緊湊模式的,我在windows下,用vc的編譯器也不是緊湊的,用tc的編譯器就是緊湊的。例如:

            在TC下:struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;(緊湊模式)

            在GCC下:struct my{ char ch; int a;} sizeof(int)=4;sizeof(my)=8;(非緊湊模式)

            在GCC下:struct my{ char ch; int a;}__attrubte__ ((packed)) sizeof(int)=4;sizeof(my)=5

            2. __attribute__關(guān)鍵字主要是用來在函數(shù)或數(shù)據(jù)聲明中設(shè)置其屬性。給函數(shù)賦給屬性的主要目的在于讓編譯器進(jìn)行優(yōu)化。函數(shù)聲明中的__attribute__((noreturn)),就是告訴編譯器這個(gè)函數(shù)不會(huì)返回給調(diào)用者,以便編譯器在優(yōu)化時(shí)去掉不必要的函數(shù)返回代碼。

            GNU C的一大特色就是__attribute__機(jī)制。__attribute__可以設(shè)置函數(shù)屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。

            __attribute__書寫特征是:__attribute__前后都有兩個(gè)下劃線,并且后面會(huì)緊跟一對(duì)括弧,括弧里面是相應(yīng)的__attribute__參數(shù)。

            __attribute__語法格式為:

            __attribute__ ((attribute-list))

            其位置約束:放于聲明的尾部“;”之前。

            函數(shù)屬性(Function Attribute):函數(shù)屬性可以幫助開發(fā)者把一些特性添加到函數(shù)聲明中,從而可以使編譯器在錯(cuò)誤檢查方面的功能更強(qiáng)大。__attribute__機(jī)制也很容易同非GNU應(yīng)用程序做到兼容之功效。

            GNU CC需要使用 –Wall編譯器來?yè)艋钤摴δ埽@是控制警告信息的一個(gè)很好的方式。

            packed屬性:使用該屬性可以使得變量或者結(jié)構(gòu)體成員使用最小的對(duì)齊方式,即對(duì)變量是一字節(jié)對(duì)齊,對(duì)域(field)是位對(duì)齊。

            http://blogguan.blog.sohu.com/109697765.html

            /* __attribute__ ((packed)) 的位置約束是放于聲明的尾部“;”之前 */
            struct str_struct{
                    __u8    a;
                    __u8    b;
                    __u8    c;
                    __u16   d;
            } __attribute__ ((packed));

            /* 當(dāng)用到typedef時(shí),要特別注意__attribute__ ((packed))放置的位置,相當(dāng)于:
               * typedef struct str_stuct str;
               * 而struct str_struct 就是上面的那個(gè)結(jié)構(gòu)。
            */
            typedef struct {
                    __u8    a;
                    __u8    b;
                    __u8    c;
                    __u16   d;
            } __attribute__ ((packed)) str;

            /* 在下面這個(gè)typedef結(jié)構(gòu)中,__attribute__ ((packed))放在結(jié)構(gòu)名str_temp之后,其作用是被忽略的,注意與結(jié)構(gòu)str的區(qū)別。*/
            typedef struct {
                    __u8    a;
                    __u8    b;
                    __u8    c;
                    __u16   d;
            }str_temp __attribute__ ((packed));

            http://rmax2005.spaces.live.com/blog/cns!4C2190641D9E68A!311.entry


            posted on 2014-04-17 15:43 楊粼波 閱讀(431) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            青青草原综合久久大伊人导航| 国产精品视频久久久| 热re99久久精品国99热| 亚洲第一永久AV网站久久精品男人的天堂AV | 精品久久久噜噜噜久久久| 97久久婷婷五月综合色d啪蜜芽| 无码国内精品久久人妻麻豆按摩| 污污内射久久一区二区欧美日韩| 无码8090精品久久一区| 久久婷婷五月综合97色直播| 人妻无码中文久久久久专区| 国产精品视频久久久| 久久天堂电影网| 一级做a爰片久久毛片看看 | 亚洲国产精品久久久久婷婷软件 | 国产精品热久久毛片| 国产精品久久久香蕉| 99久久精品国内| 亚洲精品无码久久不卡| 久久久无码精品亚洲日韩蜜臀浪潮| 久久综合综合久久97色| 一本色综合久久| 亚洲天堂久久精品| 国产成年无码久久久免费| 久久91精品久久91综合| 2021国内久久精品| 99久久99久久精品国产片| 思思久久精品在热线热| 久久91这里精品国产2020| 久久夜色精品国产噜噜噜亚洲AV| 久久久久久国产精品免费免费| 亚洲欧美日韩中文久久| 久久久久久噜噜精品免费直播| AV无码久久久久不卡蜜桃| 波多野结衣久久一区二区| 久久精品夜色噜噜亚洲A∨| 久久99国产精品一区二区| 久久久久亚洲AV片无码下载蜜桃| 久久国产成人亚洲精品影院| 亚洲国产精品人久久| 99久久精品午夜一区二区|