新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高效的C編程之: 變量類型

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

        作者: 時間:2013-09-30 來源:網絡 收藏

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

        14.8.3全局變量

        1.邊界對齊

        對于RISC體系結構的處理器來說,訪問邊界對齊的數據要比訪問非對齊的數據更高效。表14.3顯示了結構下各數據類型所占的字節數。

        表14.3 各數據類型所占字節數

        C數據類型

        所占字節數

        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個變量形式都一樣,只是次序不同,卻導致了在最終映像中不同的數據布局,如同14.1所示,其中pad為無意義的填充數據。

        圖14.1變量在數據區里的布局

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

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

        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后,每次訪問變量都將從內存重新加載,而不是使用內存偏移,直接訪問。

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

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

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

        *globals.h*

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

        /*DECLARATIONSofglobals-includedinallsources*/

        #ifdef__arm

        structglobs

        {chartx;

        charrx;

        圖14.2對extern變量的訪問

        c語言相關文章:c語言教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武穴市| 海城市| 渝北区| 长白| 红安县| 扶余县| 正安县| 奉贤区| 仪陇县| 临沧市| 灵川县| 韶山市| 荣昌县| 鹿邑县| 安徽省| 苍山县| 柳河县| 调兵山市| 平罗县| 仙居县| 景德镇市| 德化县| 文水县| 广安市| 呼伦贝尔市| 黎城县| 百色市| 肃宁县| 新蔡县| 庄浪县| 焦作市| 贞丰县| 龙海市| 民权县| 屏东县| 鄂托克旗| 卢氏县| 大埔县| 巴马| 交口县| 昌平区|