程序中的静态变量在所有执行时间内都存在于内存中,而子程序的静态变量是通过子程序的激活记录被创建(通过调用子程序)和销毁(通过终止子程序)完成的将其从程序的函数调用堆栈中弹出并弹出,但是:
主程序中块(我的意思是控制结构或任何 {} 块)中的静态变量呢?在定义它们的块之外无法访问它们,它们的内存概念如何?
它们是否在整个程序执行过程中存在于内存中,但在它们的块之外无法访问,或者除了子程序之外的每个块也有激活记录?
程序中的静态变量在所有执行时间内都存在于内存中,而子程序的静态变量是通过子程序的激活记录被创建(通过调用子程序)和销毁(通过终止子程序)完成的将其从程序的函数调用堆栈中弹出并弹出,但是:
主程序中块(我的意思是控制结构或任何 {} 块)中的静态变量呢?在定义它们的块之外无法访问它们,它们的内存概念如何?
它们是否在整个程序执行过程中存在于内存中,但在它们的块之外无法访问,或者除了子程序之外的每个块也有激活记录?
在所有情况下,静态变量都在程序的生命周期内分配一次。(我认为您问题中的“子程序”是指 C 函数。)您的问题特定于所使用的编程语言,因此我将假设 C。
代码块“看到”(或不看到)静态变量的能力是独立的,并且是由编译器的词法范围规则强制执行的虚构。
特别是在 C 中,static
全局范围、函数范围和块范围的变量在程序的整个生命周期内都在每个程序中存储一次。在以下示例中(至少)3 个字将在程序启动时分配:
static int globalWord;
int aFunction(void) {
static int aFunctionPrivateStatic;
}
int main(void) {
while (1) {
static int whilePrivateStatic;
// ...
}
// ...
}
有关更详尽的示例,请参阅http://en.wikipedia.org/wiki/Static_variable 。