久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

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

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

本文引用地址:http://cqxgywz.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語言教程




評論


相關推薦

技術專區

關閉