嵌入式开发中局部变量被覆盖问题

嵌入式开发中局部变量被覆盖问题 

    作者: jordan.sg    时间20100115   QQ :742980934  email:zzsg2005@126.com

    欢迎转载,必须注明出处。

  

    最近,在手机开发中,发现一个有趣的问题---局部变量被覆盖,即使动态申请也会被覆盖。

      在一个函数中,形如:

 

      void fun(void)

    {

       char a[20];

       char b[162];

 

        //--------------

        memset(b,0,(sizeof(char)*b));

        strcpy(b,"KKKKKKKKKKKKKKKKKKKKKK")  ;

        .....

          fun2();  发现这里函数调用后,b的内容被覆盖;

       

    }

 

       b是申请在 stack 上的,fun2调用也会使用stack。如果b被覆盖,证明stack已经不够用了。

  

      于是修改函数,采用动态申请方式给b分配空间。代码就不写了。测试结果是也会被覆盖。

   

      从系统自由空间申请和多媒体空间申请也是一样。

      

      由于没分析源码,不了解具体空间管理机制,不能对这种现象下结论。

 

      看来,既然函数调用会使用stack 空间,那么要解决此问题,只有减少 stack的使用。

     

       故,不调用 fun2,而使用等价于fun2的底层函数。目的是使调用函数减少到最少。

 

       经测试,问题解决。

 

 

       嵌入式系统开发中经常会遇到空间不足的问题,所以我们写的代码也要经常检查执行成功失败,准备好失败处理。

      而今天这个局部变量被覆盖问题,也是在编译和运行期都不容易发现的问题。逐步跟踪内存才能发现。这种问题的出现

      从而说明了编写高效代码的必要性。可读性就不是那么重要了。这一点和在PC上编程有很大的区别。

          作者: jordan.sg    时间20100115   欢迎转载,必须注明出处。

 

 

      

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值