首先問大家兩個問題:
- 8位單片機定義一個int型變量,占幾個字節?
- 32位單片機定義一個char型變量,占幾個字節?
Keil C51、8位單片機
這一節基于Keil C51工具,8位單片機(AT89C51)進行測試。這是一個很簡單的Demo,只針對變量占用空間大小進行測試,主要是對比data的大小,初始值為9。(其中系統【啟動文件】占用了9字節RAM空間) 1.char占1字節//char a;
void main(void)
{
while(1)
{
}
}
定義變量:
char a;
編譯結果:
Program Size: data=10.0 xdata=0 code=17
2.short占2字節定義變量:
short a;
編譯結果:
Program Size: data=11.0 xdata=0 code=17
3.int占2字節
定義變量:
int a;
編譯結果:
Program Size: data=11.0 xdata=0 code=17
4.float占4字節
定義變量:
float a
編譯結果:
Program Size: data=13.0 xdata=0 code=17
5.double占4字節
定義變量:
double
編譯結果:
Program Size: data=13.0 xdata=0 code=17
Keil MDK、32位單片機
這一節基于Keil MDK工具,32位單片機(STM32)進行測試。這也是一個很簡單的Demo,主要是對比RW-data的大小,初始值為0。(其中 ZI-data=1024 為系統分配的棧空間大小) 1.char占1字節//char a;
int main(void)
{
while(1)
{
// a++;
}
}
定義變量:
char a;
編譯結果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028
啥?占了4個字節? 答案:只占了一個字節,因為32位機是4字節為一個“單元”,一個 char 只占用了其中1字節(類似結構體占用空間大小,這里還牽涉到大小端對齊模式)。 再舉一個例子:定義4個 char型變量,還是占用4字節空間(short原理一樣)再次提示:
注意4字節為一個“單元”,超過這個單元就分配到“下一個單元”,比如:
char a;
int b;
char c;
這里就會占用12(3 * 4)字節空間(a、b、c各自占4字節)。
2.short占2字節定義變量:
short a;
編譯結果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
這里和 char 類似,如果定義兩個 short 也是占用4個字節。 3.int占4字節
定義變量:
int a;
編譯結果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
32位機,int占用4字節沒什么說的。 4.float占4字節
定義變量:
float a;
編譯結果:
ProgramSize:Code=520RO-data=436RW-data=4ZI-data=1028
5.double占8字節
定義變量:
double a;
編譯結果:
ProgramSize:Code=1156RO-data=436RW-data=8ZI-data=1024
總結
上面驗證情況在Keil C51、 8位單片機(AT89C51)中:-
char:占1字節
-
short、int:占2字節
-
float、double:占4字節
-
char:占1字節
-
short:占2字節
-
int、float:占4字節
-
double:占8字節
這里面還有很多細節內容,可能很多人都沒有深入研究過,感興趣的朋友可以自己實驗研究一下。struct Str
{
char a;
short b;
int c;
char d;
};
-
單片機
+關注
關注
6032文章
44518瀏覽量
633069 -
keil
+關注
關注
68文章
1212瀏覽量
166687
原文標題:用Keil驗證8位和32位單片機變量占用空間大小
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論