如何用Keil来验证单片机变量占多少字节

发布者:Howard_Sun最新更新时间:2023-10-04 来源: elecfans关键字:单片机  变量 手机看文章 扫描二维码
随时随地手机看文章

首先问大家两个问题:

8位单片机定义一个int型变量,占几个字节?

32位单片机定义一个char型变量,占几个字节?

我敢说很多人都不知道,或者存在疑惑。具体占多少字节,其实通过手动验证一下就知道了。 今天结合Keil C51AT89C51),以及Keil MDK(STM32)为大家验证一下 char、short、int、float、double 到底占几字节空间。

Keil C51、8位单片机


这一节基于Keil C51工具,8位单片机(AT89C51)进行测试。

//char a;


void main(void)

{

  while(1)

  {

  }

}

这是一个很简单的Demo,只针对变量占用空间大小进行测试,主要是对比data的大小,初始值为9。(其中系统【启动文件】占用了9字节RAM空间) 1.char占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)进行测试。

//char a;



int main(void)

{

  while(1)

  {

//    a++;

  }

}

这也是一个很简单的Demo,主要是对比RW-data的大小,初始值为0。(其中 ZI-data=1024 为系统分配的栈空间大小) 1.char占1字节

定义变量:


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字节


在Keil MDK、 32位单片机(STM32)中:

char:占1字节


short:占2字节


int、float:占4字节


double:占8字节


通过对比上面几个变量,以及编译结果,得出一些结论。 1.变量占多少字节,与处理器(以及编译器)有关; 2.浮点数运算更占代码空间,且double比float更占空间。上面基于32位机中进行了a++;运算,明显float、double打码量(code)更大。 3.变量数据对齐规则和结构体一样。经典的面试题:计算下面结构体占用多少字节?

struct Str

{

  char a;

  short b;

  int c;

  char d;

};

这里面还有很多细节内容,可能很多人都没有深入研究过,感兴趣的朋友可以自己实验研究一下。


关键字:单片机  变量 引用地址:如何用Keil来验证单片机变量占多少字节

上一篇:基于AT89C51的电流源设计
下一篇:单片机C语言教程第二课-初步认识51芯片

推荐帖子

低相位噪声压控振荡器的研究
振荡器以其多种不同的功能在射频电路领域有着广泛的应用。相位噪声直接影响着频率的稳定性,位错率以及锁相环中临近频道干涉。到目前为止,对于严格的相位噪声指标而言,电感电容调频振荡器是唯一可靠的实现方法。本文研究和比较了电感电容振荡器的线性与非线性相位噪声模型。介绍了一种基于振荡器时变特性的通用理论,总结了有效地降低相位噪声的方法。基于这些理论以及HPADS(AdvancedDesignSystem)的仿真,分析了电感电容振荡器中相位噪声的主要来源。采取了一些方法,有效地抑制了这些噪声源,从而优化了相
ZYXWVU RF/无线
差分放大
差分放大,问题如图,谢谢差分放大该电路确实只放大Vin1-Vin2的信号(严格一点说是Vin2-Vin1)。如果Vin2=Vin1(无论Vin2和Vin1怎么变化,但只要二者瞬时值总是相等),那么输出为零。没有方向的微弱信号,不知道那是什么东西。信号电压总要有个参考点,对这个参考点电势高或者低。当然,此电路只放大Vin1-Vin2的信号是有条件的,四支电阻必须成比例。通常R2=R4并且R1=R3。 Vin1-Vin2不是信号的值啊,这样一减去岂不是信号
QWE4562009 综合技术交流
VLSI数字信号处理系统:设计与实现
视频压缩、无线通信、全球定位、雷达景像在DSP的广泛应用领域内,怎样设计出高速、精巧的VLSI系统?并行处理、流水线、ASIC、可编程数字信号处理器,为实现DSP算法,技术与工具怎样结合才能更加完美?本书半为您提供答案。它既是折叠、异步流水线等技术的资源宝库,同时也是方向标,通过大量的实践经验指明了进行VLSI王国的捷径。https://download.eeworld.com.cn/detail/%E8%AE%BA%E6%96%87%E5%B8%9D/33854VLSI数
arui1999 下载中心专版
一天的成果+样片申请经验
昨天申请的样片到了,今天淘宝的最小系统也到了,一个人在实验室焊贴片这是我第一次焊贴片,焊了4块,有两块焊的很完美,还有两块修修补补也成功了两个块MSP430F149,两块MSP430F168,引脚是兼容的,用的一种板子实验室有热风台,开始以为焊贴片要用到这个,但没用上,用一把普通烙铁就搞定了再传授一点申请样片的经验,首先,我用的就是QQ邮箱,我们学校的邮箱不知道被那个注册了这是我自去年一月以来第6次申请TI的样片,准确的说这是第三次,因为当中有三次被拒绝了,当时老没登邮箱,没
石玉 TI技术论坛
verilog12864的动态显示
有没有哪位好心人用verilog写过12864的动态显示汉字和字符的,就是我做的一个频率计想要动态显示到液晶上~~~~求助,有动态显示的例程最好了~~~verilog12864的动态显示汉字是不需要动态显示的吧,只是变化数字,那应该好办。看看这个https://bbs.eeworld.com.cn/thread-418663-1-1.html白丁发表于2015-12-720:55汉字是不需要动态显示的吧,只是变化数字,那应该好办。看看这个http://bbs.eewor
875776347 FPGA/CPLD
基于DSP的PCI高速测控系统结构(1)
引言随着数字信号处理芯片性价比的不断提高,数字信号处理的应用领域飞速发展,同时Pentium高速CPU的出现,要求有极高的数据通量予以支持,而低速的ISA总线在解决这些问题方面逐渐无能为力,取而代之的是高速的PCI总线。PCI总线可将高速外围设备直接挂在CPU总线上,33MHz/32位时数据传输速率可达132MB/s,66MHz/64位时更是性能加倍,打破了数据传输速率的瓶颈,使得CPU的性能得到充分发挥。如果采用美国TI公司生
songbo 工控电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved