static
关键字如何在内部运作?考虑基本定义static variable is initialized only once
,run-time
或compile
时间如何根据执行流程对其进行解释?请考虑代码段:
void function()
{
static int count=0;
count++;
}
main()
{
for(int i=0;i<=10;i++)
function();
}
行static int count=0;
只执行一次,而迭代i=0
中的行是我能想到的最佳解释。它是正确的还是以其他方式工作?
内存中存储的是静态变量stack
还是heap
?
static object
中还有一个名为Objective-C
的内容吗?如果它与普通物体有什么不同?
答案 0 :(得分:5)
您的上一个问题表明您在询问本地变量声明中使用static
的情况。
static关键字如何在内部工作?
这是特定于实现的。
这与分配的内存有什么关系吗?
是的,使用static
声明的本地人驻留在静态存储中。
编译器/运行时是否在第一次遇到后跳过它?
运行时只执行一次初始化。 static
本地人是价值初始化的,除非另有说明。
答案 1 :(得分:2)
这对编译器和内存的分配方式意味着什么,具体取决于它的位置。函数内部在堆栈中分配并持续函数的生命周期,并且在调用之间不保留值。使用static
声明,变量在分配全局变量(通常为.bss)的地方分配,并且值在函数调用之间保持不变,但变量的范围仅限于该函数。
当static
用于函数外的全局声明时,该变量仅在该模块中具有作用域。也就是说,如果你在module1.cpp中声明一个静态变量,那么module2.cpp就无法使用extern访问它。