局部变量升级为全局变量后程序的影响

开发程序时,有时会关注不同的资源重点,需要将全局和局部变量互相转化以使程序资源不紧张。

一般情况下,编译程序后会关注两大点:程序大小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使用率时,变量定义在不同位置也是一种优化的方式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值