c - 嵌套 {} 内局部变量的内存分配

标签 c scope runtime local-variables compile-time

引用以下代码,我对 var2 局部变量的分配有一些疑问。

  1. 什么时候分配局部变量var2的内存? var2 是否会在函数被调用或条件满足且控制进入 if(Threshold > 5) 时分配?

  2. var2保持在condition内是否只是限制了局部变量的范围?

  3. var2 保持在条件内是否会提高处理速度,因为每次调用函数时都不会分配和取消分配变量?

void fun1(int Threshold)
{
    int var1 = 0;
    if(Threshold > 5)
    {
        int var2 = 0;
    }
}

最佳答案

根据优化级别,变量可能根本不会分配。优化编译器可以丢弃所有未使用的变量,并为两个具有非重叠生命周期的变量重用内存。

检查汇编程序输出(gcc -S file.c),通常可以看到在函数入口后立即分配的所有已用变量:

 sub r1, $108   ;;  stack space needed for array[100] (and some)

对应于:

 void func(bool a)
 {
      if (a)
      {
           char array[100];
           subfunc(array, 100);
      } else {
           char array2[15];
           subfunc2(array2, 15);
      }
 }

关于c - 嵌套 {} 内局部变量的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702717/

相关文章:

angularjs - Angular JS Action on ng-change the select dropdown

java - 理解java中的内存使用概念

c++ - Amicable Numbers : Runtime is to long. 是什么原因造成的?算法复杂度?

c++ - 检查内存值

c++ - 如何获取 Char a const * TCHAR 指针指向

c - 如何计算成功结束的子进程?

c - sigaction 和 sigset_t 在 Solaris 和 Linux 之间的可移植性

python-3.x - python 本地函数中未解析的引用

c++ - 离开作用域时调用函数

algorithm - O(n log n)时间和O(1)空间复杂度与O(n)时间和O(n)空间复杂度的算法