2019-08-17 03:58发布
lanlzp 发表于 2017-6-29 10:33 rom flash里面,不需要分配内存
MissLiu 发表于 2017-6-29 10:40 ROM和flash的确没分配内存的说法,那加上const不溢出的原因是不是要存储在ROM中?
MissLiu 发表于 2017-6-29 10:28 我使用的是IAR编译,一开始是全局变量的大型图片数组,编译失败,但是在数组前面加上const可以通过编译是 ...
Owen 发表于 2017-6-29 11:46 加上const之后数组存在FLASH,不加const存在RAM里。网上说的意思应该是:const修饰的是常量,存在flash, ...
MissLiu 发表于 2017-6-29 14:05 感觉是正确的,但是还是有一个问题就是: 如果我数组大小是可以通过不添加const就可以的通过的情况下, ...
最多设置5个标签!
ROM和flash的确没分配内存的说法,那加上const不溢出的原因是不是要存储在ROM中?
const数据分配在只读数据段,推荐查看
http://www.360doc.com/content/12/0407/10/9400799_201605164.shtml
加上const之后数组存在FLASH,不加const存在RAM里。网上说的意思应该是:const修饰的是常量,存在flash,整个程序只在存储器中固定位置保存一个数组,整个程序公用,都到对应的地址提取数据;非常量的话比如你要把数组作为实参传给函数,那么函数就需要开辟内存缓存数组的值,就格外浪费了内存。简单来说,就是你的理解是对的
感觉是正确的,但是还是有一个问题就是:
如果我数组大小是可以通过不添加const就可以的通过的情况下,数组是存储在哪?是RAM中吗?我觉得不对,因为RAM中是不能保存数据的。
这里还有一点要注意是,我的是编译的时候,不是运行的时候。也就是说,编译的时候出现溢出。
为什么觉得RAM不能保存数据?RAM掉电数据确实不会保存,但是单片机运行期间,数据都是在RAM里的。我猜你的数组时一个全局变量,大小又可以明确计算出来,编译的时候编译器会检查这个数组的大小、规划这个数组放在存储器的特定位置,所以会报错
一周热门 更多>