DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 108|回复: 0
打印 上一主题 下一主题

ADS下C语言中局部变量的存储位置分配

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 17:03:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      按照一般教科书上的说法,C语言中的局部变量应该是分配在"栈"中的。而实际情况,有些出入录,肯能更容易理解。
  这一段代码,唯一的用途,就是分配变量。int func1(void)
{
    volatile int father;
    volatile int mother;
    volatile int boy;
    volatile int girl;
    father = 30;
    mother = boy = girl = father;
    return father;
}
int func2(void)
{
    volatile int father;
    volatile int mother;
    volatile int boy;
    volatile int girl;
    volatile int unnecessary;
    father = 30;
    mother = boy = girl = father;
    unnecessary = 0;
    return father;
}
int func3(void)
{
    volatile int stONe[2];
    stone[0] = 30;
    return stone[0];
}
int func4(void)
{
    volatile int stone[2];
    stone[0] = 30;
    if(stone[0] == 30)
    {
        volatile int father;
        father = 91;
    }   
    else
    {
        volatile int mother;
        mother = 90;
    }
    return stone[0];
}
int func5(void)
{
    volatile int stone[2];
    stone[0] = 30;
    if(stone[0] == 30)
    {
        volatile int boy[2];
        boy[0] = 91;
    }   
    else
    {
        volatile int girl[2];
        girl[0] = 90;
    }
    return stone[0];
}
int func10(int a, int b, int c, int d)
{
    return a + b + c + d;
}
int func11(int a, int b, int c, int d)
{
    volatile int father = a;
    volatile int mother = b;
    volatile int boy = c;
    volatile int girl = d;
    return father + mother + boy + girl;
}
typedef struct Home
{
    int father;
    int mother;
} THome;
int func12()
{
    THome home;
    home.father= 12;
    home.mother = 12;
    return home.father + home.mother;
}
typedef int uint32;
int func13()
{
    uint32 home = 2;
    home *= 2;
    return home;
}
int main(void)
{
    func1();
    func2();
    func3();
    func4();
    func5();
   
    func10(1,2,3,4);
    func11(1,2,3,4);
    func12();
    func13();
}


  通常,ADS编译的代码使用R13作为堆栈指针,也就是SP。
  先看看刚进入main()函数的时候,R13=0x08000000。



  进入fun1()后,R13=0x07FFFFC。没有变化,说明这几个变量没有入栈,实际上他们分别分配在R0-R3。



  进入fun3()后,R13=0x07FFFF0。比0x07FFFFC少12字节,除了数组入栈外,还有PC。



  进入fun5()后,R13=0x07FFFE8。比fun4()少8字节,说明分支中的数组也入栈了。



  进入fun11()后,R13=0x07FFFEC。比0x07FFFFC少16字节,4个形参仍然分配在R0-R3,另外4个变量入栈。



  进入fun13()后,R13=0x07FFFFC。没有变化,char、int这些变量即使经过typedef,其处理方法仍然不变。


    
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-23 17:13 , 耗时 0.096412 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表