中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 高效的C編程之: 變量類型

        高效的C編程之: 變量類型

        作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

        本文引用地址:http://www.antipu.com.cn/article/257017.htm

        14.8.3全局變量

        1.邊界對(duì)齊

        對(duì)于RISC體系結(jié)構(gòu)的處理器來(lái)說(shuō),訪問(wèn)邊界對(duì)齊的數(shù)據(jù)要比訪問(wèn)非對(duì)齊的數(shù)據(jù)更高效。表14.3顯示了結(jié)構(gòu)下各數(shù)據(jù)類型所占的字節(jié)數(shù)。

        表14.3 各數(shù)據(jù)類型所占字節(jié)數(shù)

        C數(shù)據(jù)類型

        所占字節(jié)數(shù)

        char,singedchar,unsignedchar

        1

        short,unsignedshort

        2

        int,unsignedint,long,unsignedlong

        4

        float

        4

        double

        4

        longlong

        4

        變量定義雖然很簡(jiǎn)單,但是也有很多值得注意的地方。先看下面的例子。

        定義1:

        chara;

        shortb;

        charc;

        intd;

        定義2:

        chara;

        charc;

        shortb;

        intd;

        這里定義的4個(gè)變量形式都一樣,只是次序不同,卻導(dǎo)致了在最終映像中不同的數(shù)據(jù)布局,如同14.1所示,其中pad為無(wú)意義的填充數(shù)據(jù)。

        圖14.1變量在數(shù)據(jù)區(qū)里的布局

        從圖中可以看出,第二種方式節(jié)約了更多的存儲(chǔ)器空間。

        由此可見(jiàn),在變量聲明的時(shí)候需要考慮怎樣最佳的控制存儲(chǔ)器布局。當(dāng)然,在一定程度上能夠優(yōu)化這類問(wèn)題,但最好的方法還是在編譯的時(shí)候把所有相同類型的變量放在一起定義。

        2.訪問(wèn)外部變量

        首先來(lái)看一個(gè)例子。下面的例子定義了一些全局變量,在main()中為這些變量賦值并將其打印輸出。

        /************

        *access.c*

        ************/

        #includestdio.h>

        chartx;

        charrx;

        charbyte;

        charc;

        unsignedstate;

        unsignedflags;

        intmain()

        {tx=1;

        rx=2;

        byte=3;

        c=4;

        state=5;

        flags=6;

        printf(%u%u%u%u%u%un,tx,rx,byte,c,state,flags);

        return0;

        }

        使用編譯,生成的代碼大小如下。

        C$$code132

        C$$data12

        如果將全局變量聲明為extern,變量的定義在其他文件中,那么生成的代碼量將有所增加。

        將全局變量聲明為extern,生成的代碼大小如下。

        C$$code168

        C$$data12

        這是因?yàn)楫?dāng)將變量聲明為extern后,每次訪問(wèn)變量都將從內(nèi)存重新加載,而不是使用內(nèi)存偏移,直接訪問(wèn)。

        下圖顯示對(duì)聲明為extern變量的訪問(wèn)。

        解決的辦法是將要從外部引用的extern變量定義在一個(gè)結(jié)構(gòu)體中。在程序中通過(guò)結(jié)構(gòu)體訪問(wèn)外部變量。具體用法如下例所示。

        /*************

        *globals.h*

        *************/

        /*DECLARATIONSofglobals-includedinallsources*/

        #ifdef__arm

        structglobs

        {chartx;

        charrx;

        圖14.2對(duì)extern變量的訪問(wèn)

        c語(yǔ)言相關(guān)文章:c語(yǔ)言教程




        關(guān)鍵詞: C編程 變量類型 armcc ARM 編譯器

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉