内联静态数据的初始化

Initialization of inline static data

本文关键字:初始化 数据 静态      更新时间:2023-10-16

我想知道静态内联数据是如何以及何时在C++中初始化的(例如在 gcc 或 clang 中(。我知道这是特定于某些架构的问题,与C++标准无关。

我知道对于静态/全局非内联数据,gcc 正在使用.init.fini部分来构造和破坏具有此类限定符的对象,但这不适用于内联静态数据,因为它可以在许多翻译单元中初始化,因此init部分最终会为单个对象进行许多初始化,这是错误的。

有谁知道实现是如何工作的?

需要明确的是,我对这些内联变量初始化的实现感兴趣。

该实现等效于函数局部静态的实现,后者也"冒着"被重复初始化的风险:创建一个额外的保护变量并检查,使初始化只发生一次。 这个过程的组装非常简单。