野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8669|回复: 12

关于const修饰符的问题

[复制链接]
发表于 2019-2-21 14:53:34 | 显示全部楼层 |阅读模式
大家好!
      我有一个大小为实际元素占用1K的数组(未具体声明其大小),使用const修饰时,发现ROM的使用空间几乎多了10K,而去掉const,发现在RAM中的占用空间仅为1K,这是为什么呢?
回复

使用道具 举报

发表于 2019-2-21 15:09:49 | 显示全部楼层
ROM?RAM?Const修饰的变量好像是放在FLASH里的吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 15:30:56 | 显示全部楼层
774503480 发表于 2019-2-21 15:09
ROM?RAM?Const修饰的变量好像是放在FLASH里的吧

是的,const修饰的就是放在FLASH里面,我这个ROM就是指FLASH,但奇怪的是,如果是放在FLASH里面,FLASH的占用空间应该只会增加1K,但是实际上却比1K要多很多。
回复 支持 反对

使用道具 举报

发表于 2019-2-21 16:22:56 | 显示全部楼层
978041911 发表于 2019-2-21 15:30
是的,const修饰的就是放在FLASH里面,我这个ROM就是指FLASH,但奇怪的是,如果是放在FLASH里面,FLASH的 ...

是用map文件看的大小吗,是看的数组Size还是只看ROM跟RAM的大小增加多少判断的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 16:36:06 | 显示全部楼层
774503480 发表于 2019-2-21 16:22
是用map文件看的大小吗,是看的数组Size还是只看ROM跟RAM的大小增加多少判断的?

如下图一,是加了const修饰后编译的MAP文件信息,可以看到ROM是用了119.33KB,RAM是用了13.48KB,而图二是未加const修饰的MAP文件信息,可以看到ROM是用了109.14KB,RAM是用了14.49KB。
RAM的变化是正确的,整个数组大概就是1K多了几个字节,但是ROM为什么变化会超过10K呢?我想不明白。
增加const修饰.PNG                        (图一)
不加const修饰.PNG


                        (图二)
回复 支持 反对

使用道具 举报

发表于 2019-2-21 17:02:09 | 显示全部楼层
978041911 发表于 2019-2-21 16:36
如下图一,是加了const修饰后编译的MAP文件信息,可以看到ROM是用了119.33KB,RAM是用了13.48KB,而图二 ...

那你在map文件里搜一下该数组Size大小,两种方式都查看一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:18:44 | 显示全部楼层
774503480 发表于 2019-2-21 17:02
那你在map文件里搜一下该数组Size大小,两种方式都查看一下

数组大小是正常的,两种编译结果都是1026 byte.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:34:03 | 显示全部楼层
本帖最后由 978041911 于 2019-2-21 17:36 编辑

两种情况下MAP对比.PNG
我对比了下两种情况下的MAP文件,发现分散加载文件中的LR_IROM1分配空间多了将近10K,FLASH多出来的10K空间占用应该就是此处造成的,但是,这里为啥会出现这种情况呢?请大佬们指教。
回复 支持 反对

使用道具 举报

发表于 2019-2-21 17:37:29 | 显示全部楼层
978041911 发表于 2019-2-21 17:18
数组大小是正常的,两种编译结果都是1026 byte.

既然都是正常值,那能在map文件里找一找什么东西被撑大了吗,毕竟肯定有其他东西被撑大的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:45:10 | 显示全部楼层
774503480 发表于 2019-2-21 17:37
既然都是正常值,那能在map文件里找一找什么东西被撑大了吗,毕竟肯定有其他东西被撑大的

分散加载文件里面的ROM空间分配变大了,其他地方没有变,只是不知道为什么会造成这个ROM空间的分配变大这么多。
回复 支持 反对

使用道具 举报

发表于 2019-2-21 17:51:16 | 显示全部楼层
978041911 发表于 2019-2-21 17:45
分散加载文件里面的ROM空间分配变大了,其他地方没有变,只是不知道为什么会造成这个ROM空间的分配变大这 ...

除了这个呢,其他的函数大小跟数组大小有没变化
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-22 08:36:56 | 显示全部楼层
774503480 发表于 2019-2-21 17:51
除了这个呢,其他的函数大小跟数组大小有没变化

其他的基本没有变化。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-22 15:32:00 | 显示全部楼层
mark,有没有大佬碰到过这种情况啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 20:11 , Processed in 0.040552 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表