新聞中心

        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語言教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 日喀则市| 芦山县| 花莲市| 财经| 蚌埠市| 岚皋县| 新源县| 龙井市| 鹤庆县| 康马县| 宁陵县| 紫阳县| 丁青县| 保康县| 隆昌县| 陆河县| 通城县| 陈巴尔虎旗| 苗栗县| 湖南省| 滦平县| 东兴市| 黎川县| 永仁县| 诏安县| 两当县| 梨树县| 宣威市| 文安县| 宜丰县| 双峰县| 桑日县| 伊金霍洛旗| 那坡县| 天全县| 遂宁市| 罗江县| 宁强县| 桐梓县| 蓬安县| 滨州市|