网站只显示一个网址,社交型网站开发,注册公司登录什么网站,中信建设有限责任公司企业资质ARM中ZI-data段和RW-data段 1、只定义全局变量#xff0c;不使用#xff0c;不占用内存空间2、 定义并初始化全局变量为0 占用ZI-Data区域3、定义并初始化全局变量非0 占用RW-Data区域4、增加的是一个int8的数据为什么#xff0c;size增加不是15、定义的全局变量为0#xf… ARM中ZI-data段和RW-data段 1、只定义全局变量不使用不占用内存空间2、 定义并初始化全局变量为0 占用ZI-Data区域3、定义并初始化全局变量非0 占用RW-Data区域4、增加的是一个int8的数据为什么size增加不是15、定义的全局变量为0但增加的是RW-Data段大小 最近使用Keil写代码时碰到了几个现象现在汇总一下 初始情况 Program Size: Code51988 RO-data5560 RW-data592 ZI-data3064
1、只定义全局变量不使用不占用内存空间 在下面情况下都是使用了全局变量的。 2、 定义并初始化全局变量为0 占用ZI-Data区域
Program Size: Code52000 RO-data5560 RW-data592 ZI-data3072 在map文件也可以看出占用ZI-Data区域
3、定义并初始化全局变量非0 占用RW-Data区域
Program Size: Code52000 RO-data5560 RW-data596 ZI-data3068 map文件也可以看出占用RW-Data区域
4、增加的是一个int8的数据为什么size增加不是1 与数据对齐以及段对齐有关有关ARM是32位的同时定义段时会有对齐操作 对比两个map文件
RW-Data: 全局初始化非0的大于全局初始化为0的4字节包括变量本身Pad(补齐)处的3(6-3)字节 ZI-Data: 全局初始化为0的大于全局初始化非0的4字节包括变量本身Pad(补齐)处的3(13-10)字节
那么如何确定是由于对齐影响的呢在全局变量初始化非0情况下增加一个全局变量非0的变量 Program Size: Code52004 RO-data5560 RW-data596 ZI-data3068 其Map文件
总的RW-data不变总的Pad减1main的RWdada加1
5、定义的全局变量为0但增加的是RW-Data段大小 与–bss_thresholdnum 编译选项有关 默认是当定义变量小于8字节时编译器优化变量位于RW-Data段只有大于8字节数据变量才位于ZI-Data段 初始化大小 Program Size: Code51988 RO-data5560 RW-data760 ZI-data2904
定义小于8字节数据大小 Program Size: Code52000 RO-data5560 RW-data764 ZI-data2900
定义大于8字节数据大小 Program Size: Code52008 RO-data5560 RW-data760 ZI-data3032 修改–bss_threshold0 可以得到1-4中的结果