<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sizeof:對齊問題

    因?yàn)閷R問題使結(jié)構(gòu)體的sizeof變得比較復(fù)雜,看下面的例子:(默認(rèn)對齊方式下)

    struct s1
    {
    char a;
    double b;
    int c;
    char d; 
    };

    struct s2
    {
    char a;
    char b;
    int c;
    double d;
    };

    cout<<sizeof(s1)<<endl; // 24
    cout<<sizeof(s2)<<endl; // 16

      
    同樣是兩個char類型,一個int類型,一個double類型,但是因?yàn)閷鐔栴},導(dǎo)致他們的大小不同。計(jì)算結(jié)構(gòu)體大小可以采用元素?cái)[放法,我舉例子說明一下:首先,CPU判斷結(jié)構(gòu)體的對界,根據(jù)上一節(jié)的結(jié)論,s1s2的對界都取最大的元素類型,也就是double類型的對界8。然后開始擺放每個元素。
      
    對于s1,首先把a放到8的對界,假定是0,此時下一個空閑的地址是1,但是下一個元素ddouble類型,要放到8的對界上,離1最接近的地址是8了,所以d被放在了8,此時下一個空閑地址變成了16,下一個元素c的對界是416可以滿足,所以c放在了16,此時下一個空閑地址變成了20,下一個元素d需要對界1,也正好落在對界上,所以d放在了20,結(jié)構(gòu)體在地址21處結(jié)束。由于s1的大小需要是8的倍數(shù),所以21-23的空間被保留,s1的大小變成了24
      
    對于s2,首先把a放到8的對界,假定是0,此時下一個空閑地址是1,下一個元素的對界也是1,所以b擺放在1,下一個空閑地址變成了2;下一個元素c的對界是4,所以取離2最近的地址4擺放c,下一個空閑地址變成了8,下一個元素d的對界是8,所以d擺放在8,所有元素?cái)[放完畢,結(jié)構(gòu)體在15處結(jié)束,占用總空間為16,正好是8的倍數(shù)。

      
    這里有個陷阱,對于結(jié)構(gòu)體中的結(jié)構(gòu)體成員,不要認(rèn)為它的對齊方式就是他的大小,看下面的例子:

    struct s1
    {
    char a[8];
    };

    struct s2
    {
    double d;
    };

    struct s3
    {
    s1 s;
    char a;
    };

    struct s4
    {
    s2 s;
    char a; 
    };

    cout<<sizeof(s1)<<endl; // 8
    cout<<sizeof(s2)<<endl; // 8
    cout<<sizeof(s3)<<endl; // 9
    cout<<sizeof(s4)<<endl; // 16;

      s1
    s2大小雖然都是8,但是s1的對齊方式是1s28double),所以在s3s4中才有這樣的差異。

      
    所以,在自己定義結(jié)構(gòu)體的時候,如果空間緊張的話,最好考慮對齊因素來排列結(jié)構(gòu)體里的元素。

    posted on 2009-05-16 18:11 蔣耘 閱讀(664) 評論(0)  編輯  收藏 所屬分類: C/C++


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2009年5月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一个人看www在线高清免费看| 亚洲综合一区无码精品| 国产亚洲精彩视频| 免费无码又爽又刺激聊天APP| 亚洲成a人不卡在线观看| 久久大香香蕉国产免费网站| 亚洲午夜久久久久久久久电影网| 暖暖免费中文在线日本| 亚洲成A人片在线观看无码3D | 亚洲精品无码永久在线观看 | 久久精品亚洲中文字幕无码网站 | 亚洲欧美国产国产综合一区| 色吊丝永久在线观看最新免费| 亚洲妇女无套内射精| 国产乱人免费视频| 久久久精品国产亚洲成人满18免费网站 | 亚洲天堂一区二区三区四区| 在线观看特色大片免费视频| 亚洲精品无码永久在线观看男男 | 91麻豆国产自产在线观看亚洲| 国产免费一区二区三区免费视频| 亚洲综合色婷婷七月丁香| 日韩免费无码一区二区三区| 亚洲午夜久久久精品电影院| 四虎永久免费影院| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 亚洲国产成人久久精品app| 精品久久久久久久免费人妻| 一级女性全黄生活片免费看| 亚洲成a人片在线观看日本| 又黄又爽又成人免费视频| 色网站在线免费观看| 亚洲av日韩av无码| 午夜影视在线免费观看| 一级免费黄色大片| 亚洲成人在线免费观看| 亚洲AV无码乱码在线观看牲色| 久久香蕉国产线看免费| 亚洲AV无码成人网站在线观看 | 亚洲国产精品午夜电影| 亚洲成?Ⅴ人在线观看无码|