2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
Keil C51、8位單片機(jī)

這是一個很簡單的Demo,只針對變量占用空間大小進(jìn)行測試,主要是對比data的大小,初始值為9。(其中系統(tǒng)【啟動文件】占用了9字節(jié)RAM空間)1.char占1字節(jié)//char a;void main(void){while(1){}}
定義變量:
char a;編譯結(jié)果:
Program Size: data=10.0 xdata=0 code=172.short占2字節(jié)定義變量:
short a;編譯結(jié)果:
Program Size: data=11.0 xdata=0 code=173.int占2字節(jié)定義變量:
int a;編譯結(jié)果:
Program Size: data=11.0 xdata=0 code=174.float占4字節(jié)定義變量:
float a編譯結(jié)果:
Program Size: data=13.0 xdata=0 code=175.double占4字節(jié)定義變量:
double編譯結(jié)果:
Program Size: data=13.0 xdata=0 code=17Keil MDK、32位單片機(jī)
這一節(jié)基于Keil MDK工具,32位單片機(jī)(STM32)進(jìn)行測試。這也是一個很簡單的Demo,主要是對比RW-data的大小,初始值為0。(其中 ZI-data=1024 為系統(tǒng)分配的棧空間大小)1.char占1字節(jié)//char a;int main(void){while(1){// a++;}}
定義變量:
char a;編譯結(jié)果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028啥?占了4個字節(jié)?答案:只占了一個字節(jié),因?yàn)?2位機(jī)是4字節(jié)為一個“單元”,一個 char 只占用了其中1字節(jié)(類似結(jié)構(gòu)體占用空間大小,這里還牽涉到大小端對齊模式)。再舉一個例子:定義4個 char型變量,還是占用4字節(jié)空間(short原理一樣)再次提示:注意4字節(jié)為一個“單元”,超過這個單元就分配到“下一個單元”,比如:
char a;int b;char c;
這里就會占用12(3 * 4)字節(jié)空間(a、b、c各自占4字節(jié))。
2.short占2字節(jié)定義變量:
short a;編譯結(jié)果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028這里和 char 類似,如果定義兩個 short 也是占用4個字節(jié)。3.int占4字節(jié)定義變量:
int a;編譯結(jié)果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=102832位機(jī),int占用4字節(jié)沒什么說的。4.float占4字節(jié)定義變量:
float a;編譯結(jié)果:
ProgramSize:Code=520RO-data=436RW-data=4ZI-data=10285.double占8字節(jié)定義變量:
double a;編譯結(jié)果:
ProgramSize:Code=1156RO-data=436RW-data=8ZI-data=1024總結(jié)
上面驗(yàn)證情況在Keil C51、 8位單片機(jī)(AT89C51)中:char:占1字節(jié)
short、int:占2字節(jié)
float、double:占4字節(jié)
在Keil MDK、 32位單片機(jī)(STM32)中:char:占1字節(jié)
short:占2字節(jié)
int、float:占4字節(jié)
double:占8字節(jié)
通過對比上面幾個變量,以及編譯結(jié)果,得出一些結(jié)論。1.變量占多少字節(jié),與處理器(以及編譯器)有關(guān);2.浮點(diǎn)數(shù)運(yùn)算更占代碼空間,且double比float更占空間。上面基于32位機(jī)中進(jìn)行了a++;運(yùn)算,明顯float、double打碼量(code)更大。3.變量數(shù)據(jù)對齊規(guī)則和結(jié)構(gòu)體一樣。經(jīng)典的面試題:計(jì)算下面結(jié)構(gòu)體占用多少字節(jié)?這里面還有很多細(xì)節(jié)內(nèi)容,可能很多人都沒有深入研究過,感興趣的朋友可以自己實(shí)驗(yàn)研究一下。struct Str{char a;short b;int c;char d;};
2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。