• <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>

            road420

            導(dǎo)航

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計(jì)

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            結(jié)構(gòu)體的對(duì)齊

            由一道面試題來看 Struct 的對(duì)界

            ?

            本文節(jié)選自宋寶華的C/C++struct深層探索一文,本人對(duì)其所描述的struct對(duì)齊比較喜歡,為此轉(zhuǎn)來與大家分享,原文見http://blog.donews.com/21cnbao/archive/2005/09/08/544877.aspx

            ?

            Intel 、微軟等公司曾經(jīng)出過一道類似的面試題:

            1. #include <iostream.h>

            2. #pragma pack(8)

            3. struct example1

            4. {

            5. ? ??short a;

            6. ? ??long b;

            7. };

            8. struct example2

            9. {

            10. ?????? ??char c;

            11. ?????? ??example1 struct1;

            12. ?????? ??short e;

            13. };

            14. #pragma pack()

            ?

            15. int main(int argc, char* argv[])

            16. {

            17. ?????? ??example2 struct2;

            18. ??cout << sizeof(example1) << endl;

            19. ??cout << sizeof(example2) << endl;

            20. ??cout << (unsigned int)(&struct2.struct1) - (unsigned int)(&struct2)

            << endl;

            21. return 0;

            22. }

            問程序的輸入結(jié)果是什么?

            答案是:

            8

            16

            4

            不明白?還是不明白?下面一一道來:

            1 自然對(duì)界

            struct 是一種復(fù)合數(shù)據(jù)類型,其構(gòu)成元素既可以是基本數(shù)據(jù)類型(如 int long float 等)的變量,也可以是一些復(fù)合數(shù)據(jù)類型(如 array struct union 等)的數(shù)據(jù)單元。對(duì)于結(jié)構(gòu)體,編譯器會(huì)自動(dòng)進(jìn)行成員變量的對(duì)齊,以提高運(yùn)算效率。缺省情況下,編譯器為結(jié)構(gòu)體的每個(gè)成員按其自然對(duì)界( natural alignment )條件分配空間。各個(gè)成員按照它們被聲明的順序在內(nèi)存中順序存儲(chǔ),第一個(gè)成員的地址和整個(gè)結(jié)構(gòu)的地址相同。

            自然對(duì)界 (natural alignment) 即默認(rèn)對(duì)齊方式,是指按結(jié)構(gòu)體的成員中 size 最大的成員對(duì)齊。

            例如:

            struct naturalalign

            {

            char a;

            short b;

            char c;

            };

            在上述結(jié)構(gòu)體中, size 最大的是 short ,其長(zhǎng)度為 2 字節(jié),因而結(jié)構(gòu)體中的 char 成員 a c 都以 2 為單位對(duì)齊, sizeof(naturalalign) 的結(jié)果等于 6

            如果改為:

            struct naturalalign

            {

            char a;

            int b;

            char c;

            };

            其結(jié)果顯然為 12

            ?

            2 指定對(duì)界

            一般地,可以通過下面的方法來改變?nèi)笔〉膶?duì)界條件:

            · 使用偽指令 #pragma pack (n) ,編譯器將按照 n 個(gè)字節(jié)對(duì)齊;

            · 使用偽指令 #pragma pack () ,取消自定義字節(jié)對(duì)齊方式。

            注意:如果 #pragma pack (n) 中指定的 n 大于結(jié)構(gòu)體中最大成員的 size ,則其不起作用,結(jié)構(gòu)體仍然按照 size 最大的成員進(jìn)行對(duì)界。

            例如:

            #pragma pack (n)

            struct naturalalign

            {

            char a;

            int b;

            char c;

            };

            #pragma pack ()

            當(dāng) n 4 8 16 時(shí),其對(duì)齊方式均一樣, sizeof(naturalalign) 的結(jié)果都等于 12 。而當(dāng) n 2 時(shí),其發(fā)揮了作用,使得 sizeof(naturalalign) 的結(jié)果為 8

            posted on 2006-10-21 13:21 深邃者 閱讀(204) 評(píng)論(0)  編輯 收藏 引用


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


            狠狠色婷婷久久一区二区| 色综合久久中文色婷婷| 91性高湖久久久久| 性做久久久久久久久久久| 色婷婷久久综合中文久久一本| 老司机午夜网站国内精品久久久久久久久 | 91精品国产色综合久久| 国产免费久久精品99久久| 久久精品免费全国观看国产| 精品久久久久久久久午夜福利| 久久精品国产亚洲精品| 狠狠色丁香婷婷综合久久来| 久久婷婷五月综合国产尤物app| 超级碰久久免费公开视频| 2020久久精品亚洲热综合一本| 久久影视综合亚洲| 久久久久女人精品毛片| 中文字幕日本人妻久久久免费| 国产精品欧美久久久天天影视 | 久久久久久精品成人免费图片| 精品熟女少妇av免费久久| 久久99九九国产免费看小说| 亚洲午夜久久影院| 精品999久久久久久中文字幕| 欧美亚洲国产精品久久高清| 久久精品国产一区二区| 欧美一区二区精品久久| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 欧美国产精品久久高清| 久久久久久免费一区二区三区| 中文字幕久久精品无码| 欧美亚洲国产精品久久高清| 久久亚洲2019中文字幕| 久久久91人妻无码精品蜜桃HD| 久久久青草青青亚洲国产免观| 国产精品久久国产精品99盘 | 久久伊人精品青青草原高清| 97超级碰碰碰久久久久| 久久99精品久久久久子伦| 成人久久精品一区二区三区| www.久久精品|