导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:各位请看[rainmans]

 *第4435篇: C51编程:各位请看

  
楼 主:rainmans 2002年8月8日10:55
 C51编程:各位请看

    
请问:各位大虾
在keil c中,如果用
large model 编译。
函数中的局部变量是不是不能覆盖重用。

eg。

void main()
{
    fun1();
    fun2();
    .....
}

void fun1()
{
    char arr1[16] = { 0 };
    char arr2[16] = { 0 };
    
    .....
    
}

void fun2()
{
    char arr1[16] = { 0 };
    char arr2[16] = { 0 };
    
    .....
        
}


在这里,
我的理解:因为fun1()和fun2()没有调用关系.所以他们各自的局部变量应该公用一段
XRAM. 可是编译的结果是.二者的占用空间各自独立.和全局变量一样.

这不是会浪费很多RAM啊 :-(

请各位打下指教.

  
2楼:gdtyy 2002年8月10日20:19
 不会
    函数的局部变量存于堆栈中,用时分配,用完释放,这是CPU自动完成的。所有子程序的局
部变量在使用时都放在堆栈里,它们共享堆栈RAM,自动完成覆盖。
    你的疑惑在于错误的构思了C编译器的RAM分配过程,其实它用了一个极其巧妙和省事的办
法,动态、简单并且自动的完成RAM分配,这就是栈。如果编译器按你的想法分配/覆盖RAM,那
处理起来就太笨了。我越想越觉得C的处理简直太完美了。
    所有程序的处理都是这样,你看看编译原理就全明白了。
  
3楼:rainmans 2002年8月17日21:21
 thank gdtyy
是不是如果着两个函数如果没有被调用过,他们旧会占用固定的RAM。我还没有试一下

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:硬件:老古求教:关于RTL8019

[下一篇主题]:初学者:请求支援