在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設計應用 > 高效的C編程之: 變量類型

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

            作者: 時間:2013-09-30 來源:網(wǎng)絡 收藏

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

            14.8.3全局變量

            1.邊界對齊

            對于RISC體系結(jié)構(gòu)的處理器來說,訪問邊界對齊的數(shù)據(jù)要比訪問非對齊的數(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

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

            定義1:

            chara;

            shortb;

            charc;

            intd;

            定義2:

            chara;

            charc;

            shortb;

            intd;

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

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

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

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

            2.訪問外部變量

            首先來看一個例子。下面的例子定義了一些全局變量,在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

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

            下圖顯示對聲明為extern變量的訪問。

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

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

            *globals.h*

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

            /*DECLARATIONSofglobals-includedinallsources*/

            #ifdef__arm

            structglobs

            {chartx;

            charrx;

            圖14.2對extern變量的訪問

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




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

            評論


            相關(guān)推薦

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

            關(guān)閉