何时初始化 LOCAL 静态变量

问题描述

我一直看到同样的一句话,静态变量只初始化一次,我还看到一句话说“第一次进入块时”。

局部静态变量是否像其他全局变量一样初始化 - 在程序执行开始时?或者局部静态变量是否与普通全局变量不同,并且只有在调用/到达它们的函数/块后才会被初始化?

解决方法

C17 6.2.4 (3)

一个对象,其标识符的声明没有使用存储类说明符 _Thread_local,并且 具有外部或内部链接或存储类说明符 static,具有静态存储持续时间。 它的生命周期是程序的整个执行过程,它的存储值只初始化一次,之前 程序启动。

但是,请记住 as-if 规则。一个实现可能等到第一次调用函数时才初始化变量,因为在此之前符合标准的程序无法访问它的值,因此无法区分。 >

如果您的实现具有扩展或实现定义的行为,确实提供了在第一次调用函数之前访问变量的方法,那么这样的实现应该记录您是否会在这种情况下看到初始化值.在大多数情况下,我希望答案是“是”。

我熟悉的最常见的实现是从可执行文件加载初始值,或者将它放在启动时清零的 bss 部分,就像对全局或文件范围所做的那样static 变量。

,

尽管依赖于实现,静态变量 - 任何范围 - 都会在加载可执行文件时初始化。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...