在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 漫談c語言結(jié)構(gòu)體

            漫談c語言結(jié)構(gòu)體

            作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

            再看看char_long_short這個(gè)結(jié)構(gòu)體,char_long_short的地址分布情況如下表:

            成員變量

            成員變量十六進(jìn)制地址

            成員變量十進(jìn)制地址

            char_long_short.c

            0x0012FF2C

            1244972

            char_long_short.l

            0x0012FF30

            1244976

            char_long_short.s

            0x0012FF34

            1244980

            可見,其內(nèi)存分布圖如下,共12bytes:

            地址

            1244972

            1244973

            1244974

            1244975

            1244976

            1244977

            1244978

            1244979

            1244980

            1244981

            1244982

            1244983

            成員

            .c

            .l

            .s

            首先,1244972能被1整除,所以char_long_short.c放在1244972處沒有問題(其實(shí),就char型成員變量自身來說,其放在任何地址單元處都沒有問題),根據(jù)原則1,在之后的1244973~1244975中都沒有能被4(因?yàn)閟izeof(long)=4bytes)整除的,1244976能被4整除,所以char_long_short.l應(yīng)該放在1244976處,那么同理,最后一個(gè).s(sizeof(short)=2bytes)是應(yīng)該放在1244980處。

            是不是這樣就結(jié)束了?不是,還有原則2。根據(jù)原則2的要求,char_long_short這個(gè)結(jié)構(gòu)體所占的空間大小應(yīng)該是其占內(nèi)存空間最大的成員變量的大小的整數(shù)倍。如果我們到此就結(jié)束了,那么char_long_short所占的內(nèi)存空間是1244972~1244981共計(jì)10bytes,不符合原則2,所以,必須在最后補(bǔ)齊2個(gè)bytes(1244982~1244983)。

            至此,一個(gè)結(jié)構(gòu)體的內(nèi)存布局完成了。

            下面我們按照上述原則,來驗(yàn)證這樣的分析是不是正確。按上面的分析,地址單元1244973、1244974、1244975以及1244982、1244983都是空的(至少char_long_short未用到,只是“占位”了)。如果我們的分析是正確的,那么,定義這樣一個(gè)結(jié)構(gòu)體,其所占內(nèi)存也應(yīng)該是12bytes:

            struct//聲明結(jié)構(gòu)體char_long_short_new

            {

            charc;

            charadd1;//補(bǔ)齊空間
            charadd2;//補(bǔ)齊空間
            charadd3;//補(bǔ)齊空間

            longl;

            shorts;


            charadd4;//補(bǔ)齊空間
            charadd5;//補(bǔ)齊空間

            }char_long_short_new;

            運(yùn)行結(jié)果如下:

            可見,我們的分析是正確的。至于原則3,大家可以自己編程驗(yàn)證,這里就不再討論了。


            所以,無論你是在VC6.0還是KeilC51,還是KeilMDK中,當(dāng)你需要定義一個(gè)結(jié)構(gòu)體時(shí),只要你稍微留心結(jié)構(gòu)體成員變量內(nèi)存對(duì)齊這一現(xiàn)象,就可以在很大程度上節(jié)約MCU的RAM。這一點(diǎn)不僅僅應(yīng)用于實(shí)際編程,在很多大型公司,比如IBM、微軟、百度、華為的筆試和面試中,也是常見的。

            本例完整的程序代碼下載:http://www.51hei.com/f/cjgt.rar


            上一頁 1 2 3 下一頁

            關(guān)鍵詞: c語言結(jié)構(gòu)

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉