是否有充分的理由在每次调用函数时初始化静态变量?

jwy*_*k67 12 c

一位同事正在进行一些代码审查,他看到许多类似于以下内容的静态变量声明:

void someFunc(){

   static int foo;
   static int bar;
   static int baz;

   foo = 0;
   bar = 0;
   baz = 0;

   /* 
       rest of the function code goes here
   */

}
Run Code Online (Sandbox Code Playgroud)

我们的问题是,编写此代码的程序员是否只是不清楚静态变量的概念,还是有一些聪明的理由这样做是故意的?

如果它有所不同,环境是嵌入式微控制器,编译器是GCC.

das*_*ght 13

如果它不是一个嵌入式系统,你可能是正确的:我敢打赌,程序员不清楚静态的概念,并且必须写下这个:

static int foo = 0;
static int bar = 0;
static int baz = 0;
Run Code Online (Sandbox Code Playgroud)

但是,在嵌入式系统中,他们可能习惯于static避免在自动存储中(即在堆栈上)分配变量.这可以节省一些CPU周期,因为静态变量的地址将"融入"编译方法的二进制代码.

  • 它还节省了堆栈空间,我认为这可能是更重要的一点.如果函数是递归的,它将整体节省内存(尽管这将使得使用静态变量变得棘手).如果堆栈大小非常有限,则可能需要避免堆栈溢出. (7认同)
  • 使用静态变量进行递归函数调用?!最好有一个很好的理由 (2认同)