开发程序时,有时会关注不同的资源重点,需要将全局和局部变量互相转化以使程序资源不紧张。
一般情况下,编译程序后会关注两大点:程序大小和RAM使用大小
比如编译后信息如下: Program Size: Code=57686 RO-data=2726 RW-data=1320 ZI-data=25660
则程序大小=code+RO-data
Ram使用大小=RW-data+ZIdata
下面测试变量不同位置对上述两个关注点的影响,以作为后续开发优化过程中备用:
1、定义一个数组:
120个字符长度
char XP_NET[] = "$XPWER,ASW,IET,192.168.010.100,255.255.255.000,192.168.010.001,192.168.010.002,255.255.255.000,192.168.010.001,S*24\r\n";
2、将该变量定义到不同位置后编译结果如下:
局部变量: Program Size: Code=57698 RO-data=2846 RW-data=1200 ZI-data=25660
static局部变量:Program Size: Code=57686 RO-data=2726 RW-data=1320 ZI-data=25660
--放到了static区了,相当于全局变量,初始化的RW增加120;
--只读区和code减小原因:定义局部变量时,初始化的字符串"$XPWER,ASW,IET,192.168.010.100,255.255.255.000,192.168.010.001,192.168.010.002,255.255.255.000,192.168.010.001,S*24\r\n"会
被程序当做常量字符串提取出来放到只读变量区。这样RO就增加了120,code增加的大小应该是将那个字符串初始化给XPTMS_NET和全局赋值方式差异带来的逻辑
(
验证:将常量字符串加长6倍,再分别放到局部变量和全局变量后得到验证
全局变量:Program Size: Code=57686 RO-data=2726 RW-data=2020 ZI-data=25656
局部变量:Program Size: Code=57702 RO-data=3546 RW-data=1200 ZI-data=25660
)
全局变量: Program Size: Code=57686 RO-data=2726 RW-data=1320 ZI-data=25660
static全局变量: Program Size: Code=57686 RO-data=2726 RW-data=1320 ZI-data=25660 程序大小:61,216
---同static局部变量:
3、增加到255大小
char XP_NET[255] = "$XPWER,ASW,IET,192.168.010.100,255.255.255.000,192.168.010.001,192.168.010.002,255.255.255.000,192.168.010.001,S*24\r\n";
全局变量: Program Size: Code=57686 RO-data=2726 RW-data=1456 ZI-data=25660
static全局变量: Program Size: Code=57686 RO-data=2726 RW-data=1456 ZI-data=25660
--只增加了读写字段ram的大小。
所以需要优化code大小或者ram使用率时,变量定义在不同位置也是一种优化的方式。