变量与内存

2019-08-17 03:58发布

今天在STM8S103上添加了一个3K的图片数组,发现编译不通过,原来STM8S103的RAM只有1K,而ROM是8K。编译时数组是不是存放在RAM中所以编译不过。
而加上const后存储在ROM后可以编译通过。
那么问题来了:
   1.数组一开始编译时放在哪?
   2.运行时数组是放在哪?
   3.如果我将一个大型数组存放在24C02中,然后使用一个小型容量的芯片读取出来显示是否会成功。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Owen
1楼-- · 2019-08-17 05:45
数组之类的变量,如果是全局变量或者静态变量,编译的时候会放在RAM的静态变量区。运行时的变量除非程序分配,否则是放在栈中,也就是RAM里;程序可以指定放在堆中,堆也在RAM上。理论上放在24C02读出来是可以的,但是读取速度不知道能不能满足。
沧海
2楼-- · 2019-08-17 08:23
可以的。
MissLiu
3楼-- · 2019-08-17 10:04
Owen 发表于 2017-6-28 17:47
数组之类的变量,如果是全局变量或者静态变量,编译的时候会放在RAM的静态变量区。运行时的变量除非程序分 ...

我使用的是IAR编译,一开始是全局变量的大型图片数组,编译失败,但是在数组前面加上const可以通过编译是什么原因。
网上说const可以节省空间,避免不必要的内存分配是指分配空间到哪了
MissLiu
4楼-- · 2019-08-17 14:14
这里详细解析一下,本人使用的是IAR编译,MCU是STM8S103   大小是8KROM,1KRAM的芯片。问题是我之前使用一个1K左右的图片数组加入程序编译出现溢出,在数组前面加上const后不会出溢出,思考是编译时变量的数组是放在RAM中,加上const放在ROM中的8K所以没问题?
MissLiu
5楼-- · 2019-08-17 20:04
 精彩回答 2  元偷偷看……
lanlzp
6楼-- · 2019-08-17 23:41
MissLiu 发表于 2017-6-29 10:28
我使用的是IAR编译,一开始是全局变量的大型图片数组,编译失败,但是在数组前面加上const可以通过编译是 ...

rom flash里面,不需要分配内存

一周热门 更多>