嵌入式C程序中Const节省内存空间细节问题??
如下例是一个网上找的说明const节省存储空间的例证:
#define M 3 //宏常量
const int N = 5; //此时并未将N放入内存中
int main()
{
int i = N; //此时为N分配内存 ,以后不再分配
int I = M; //预编译期间进行宏替换,分配内存
int j = N; //没有内存分配
int J = M; //在进行宏替换,又一次分配内存
}
const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。
问题:
1. 记得调试时看到用const修饰的只读变量都是和代码放置在一起的,对MCU来说也就是ROM。我想问的是如果程序运行中调用该只读变量,还会降该变量重新拷贝到RAM中吗??多次调用该只读常量就只有第一次调用时拷贝到RAM中??
2. 对于那些const 修饰的比较大的只读常量被运行中的程序调用时有时怎么处理的??如const修饰的1k 的只读数组,RAM只有1K或者RAM小于1K时,程序还会将const 修饰的只读常量拷贝到RAM中吗??显然是不可能的。
3.如果对于普通的嵌入式系统,节省的是MCU的RAM还是ROM啊,好像只是ROM吧!
突然想起这个问题,由于手头没有可调试的工具,只能在网上请求各位大神了!见笑!!!