[英]where and when do the global static and local static get stored and initialized?
static int i = 10;
int
main()
{
static int i = 20;
printf ( "i = %d\n", i );
return 0;
}
有两个静态变量,一个在全局范围内,一个在函数范围内。 编译器不会引发“多个定义”错误。 您能否让我知道两个静态变量的存储位置?
这两个变量是分开存储的,因为它们是分开的-确保它们分开是编译器的问题。
变量都在程序启动之前初始化-这是C而不是C ++,规则略有不同。
如图所示,在main()
内部,您无法访问全局变量i
(同样,它是C,而不是C ++)。
GCC的-Wshadow
编译器标志会发出警告,当地i
遮蔽全局的。
这些变量称为“符号”,在编译表时会生成“符号表”。 该表包含名称,类型,作用域和指向每个符号的内存指针(就像最小符号一样,您通常会有很多东西),并且每次在特定作用域中对符号进行引用时,它都会被替换表的索引。 这些索引是唯一的,名称和范围的组合也是唯一的。
简而言之,变量的名称只是修饰,内部编译器使用符号表并对其进行索引。 在程序启动期间,通过遍历指向它们的指针表并将正确的值放在适当的位置来初始化静态函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.