1

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

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

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

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

4

1 回答 1

0

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

于 2020-02-03T02:37:39.640 回答