首先问大家两个问题:
Keil C51、8位单片机

//char a;void main(void){while(1){}}
定义变量:
char a;编译结果:
Program Size: data=10.0 xdata=0 code=17
定义变量:
short a;编译结果:
Program Size: data=11.0 xdata=0 code=17定义变量:
int a;编译结果:
Program Size: data=11.0 xdata=0 code=17
定义变量:
float a编译结果:
Program Size: data=13.0 xdata=0 code=17
定义变量:
double编译结果:
Program Size: data=13.0 xdata=0 code=17Keil MDK、32位单片机

//char a;int main(void){while(1){// a++;}}
定义变量:
char a;编译结果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028

注意4字节为一个“单元”,超过这个单元就分配到“下一个单元”,比如:
char a;int b;char c;
这里就会占用12(3 * 4)字节空间(a、b、c各自占4字节)。
定义变量:
short a;编译结果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028定义变量:
int a;编译结果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028定义变量:
float a;编译结果:
Program Size: Code=520 RO-data=436 RW-data=4 ZI-data=1028
定义变量:
double a;编译结果:
Program Size: Code=1156 RO-data=436 RW-data=8 ZI-data=1024总结
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;};
End