代码1
int main()
{
int a,b,c,d;
a=10;b=20;
c=a+b;
for(;;);
}
myex1.c(3): warning: #550-D: variable "c" was set but never used
linking... Program Size: Code=796 RO-data=336 RW-data=20 ZI-data=1636
FromELF: creating hex file...
"myex1.axf" - 0 Error(s), 1 Warning(s).
代码2 int main()
{ const int x=16;
int a,b,c,d;
a=10;b=20;
c=a+b;
for(;;);
}
myex1.c(2): warning: #177-D: variable "x" was declared but never referenced
myex1.c(3): warning: #550-D: variable "c" was set but never used
linking... Program Size: Code=800 RO-data=336 RW-data=20 ZI-data=1636
FromELF: creating hex file...
"myex1.axf" - 0 Error(s), 2 Warning(s). 说明:
(1)Code增加了4字节
(2)其余没有任何变化
代码3int main()
{ const int x=16;
int myArry[100];
int i;
int a,b,c,d;
a=10;b=20;
c=a+b;
for(i=0;i<100;i++)
myArry=i;
for(;;);
}
myex1.c(2): warning: #177-D: variable "x" was declared but never referenced
myex1.c(3): warning: #550-D: variable "myArry" was set but never used
myex1.c(5): warning: #550-D: variable "c" was set but never used
myex1.c(5): warning: #177-D: variable "d" was declared but never referenced
linking... Program Size: Code=816 RO-data=336 RW-data=20 ZI-data=1636
FromELF: creating hex file...
"myex1.axf" - 0 Error(s), 4 Warning(s).
分析:程序中增加了数组myArry,Code增加为816字节,但是RO-data等仍未变化
代码4int main()
{ const int x=16;
int myArry[100]={1,2,3,4,5,6};
int i;
int a,b,c,d;
a=10;b=20;
c=a+b;
for(i=0;i<100;i++)
myArry=i;
for(;;);
}
myex1.c(2): warning: #177-D: variable "x" was declared but never referenced
myex1.c(3): warning: #550-D: variable "myArry" was set but never used
myex1.c(5): warning: #550-D: variable "c" was set but never used
myex1.c(5): warning: #177-D: variable "d" was declared but never referenced
linking... Program Size: Code=1024 RO-data=360 RW-data=20 ZI-data=1636
FromELF: creating hex file...
"myex1.axf" - 0 Error(s), 4 Warning(s).
分析:
(1)由于myArry作了初始化,因此RO-data增加了 360-336=24字节。原因是32位机中int型变量是32位的,占4字节,所以初始6个值后,增加了24字节。
(2)再增加初始化变量的数量,则RO-data随之增加,而Code不再变化,也就是Code由代码3的816字节增加到1024字节,是增加了初始化处理的代码量。
根据以上分析,似乎与已知资料有冲突。
*************************************************** RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的未初始化的变量
由以上3点说明可以理解为:
RO就是readonly,
RW就是read/write,
ZI就是zero ****************************************************
如果按此说明,增加变量应该增加RO,但从代码1到代码2的变化来看,仅是增加了Code,却没有增加RO。
初始化变量时,应该增加RW,但是从代码2~代码4,RW却没有任何变化。
看来这个说法只能适用于ARM芯片,即运行时需要将代码调入RAM运行的芯片,对于STM32这类芯片并不完全适用。 以下再作研究:
当使用 int myArray[300]时: