首先问大家两个问题:
8位单片机定义一个int型变量,占几个字节?
32位单片机定义一个char型变量,占几个字节?
我敢说很多人都不知道,或者存在疑惑。具体占多少字节,其实通过手动验证一下就知道了。 今天结合Keil C51(AT89C51),以及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;
};
这里面还有很多细节内容,可能很多人都没有深入研究过,感兴趣的朋友可以自己实验研究一下。
上一篇:基于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 工控电子
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- DC1813A-H,用于 LTC2364CMS-18、18 位、250 ksps、15.5MHz 低功率、低噪声模数转换器的演示板
- 具有峰值电流软启动、小尺寸的 LTC3642EDD、3.3V、50mA 稳压器的典型应用电路
- LT1171IT 的典型应用,2.5A 外部电流限制
- LT6657AHMS8-1.25 负分流模式基准的典型应用电路
- 呼吸灯-----积分战队
- DC-ATX 电源转换模块
- 具有 2.5V LDO 输出的 LTC3633AEFE-1 3.3V/1.8V 降压稳压器的典型应用电路
- LTC6990IS6#TRMPBF 光到频率转换器的典型应用。 fOUT 至 -1.4kHz 每微安光电二极管电流 IPD
- TS9010DCX5 RF 150mA, 1.8V CMOS LDO with Enable 典型应用电路
- DC1856B-B,用于 LTM4649EY 16V、10A 降压稳压器的演示板
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光