声明为静态的局部变量需要多少空间?

时间:2018-10-14 01:50:47

标签: c

具体来说,如果该函数被调用n次,那么在数据段中是否会有该变量的n个副本?还是该变量有一个插槽,每次调用该函数时都会回收该插槽?

1 个答案:

答案 0 :(得分:4)

  

还是该变量有一个插槽,每次调用该函数时都会回收该插槽?

在程序的内存空间中,该变量只有一个“槽”。每次执行该函数时都会使用它,即使该函数以递归方式回调自身或两个线程同时执行该函数。

这就是为什么您应该小心使用静态局部语言的原因,因为它们会使函数成为非线程安全的。或者,您可以使用线程本地存储,但这不是Portable C的一部分,也可以使用作为函数参数传递的上下文对象。

所以这个:

int foo( int x ) {
    static int y = 5;
    return y += x;
}

等效于此:

int y = 5; // if you add the `static` modifier then that restricts the scope of `y` to just this file, it does not affect its lifetime or storage semantics.

int foo( int x ) {
    return y += x;
}