色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          本文引用地址:http://cafeforensic.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個(gè)變量形式都一樣,只是次序不同,卻導(dǎo)致了在最終映像中不同的數(shù)據(jù)布局,如同14.1所示,其中pad為無意義的填充數(shù)據(jù)。

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

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

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

          2.訪問外部變量

          首先來看一個(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后,每次訪問變量都將從內(nèi)存重新加載,而不是使用內(nèi)存偏移,直接訪問。

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

          解決的辦法是將要從外部引用的extern變量定義在一個(gè)結(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)閉