【发布时间】:2020-05-18 16:03:51
【问题描述】:
我想知道如何以及何时在 C++ 中初始化静态内联数据(例如在 gcc 或 clang 中)。我知道这是特定于某些架构的问题,与 C++ 标准无关。
我知道对于静态/全局非内联数据 gcc 使用 .init 和 .fini 部分来构造和破坏具有此类限定符的对象,但这不适用于内联静态数据,因为它可以在许多翻译单元,因此init 部分最终会为单个对象执行许多初始化,这是错误的。
有人知道这个实现是如何工作的吗?
需要明确的是,我对那些内联变量的初始化实现感兴趣。
【问题讨论】:
-
“有人检查过吗”相信我,标准委员会(和其他人)已经完成了很多很多次。该标准准确地定义了规则。您需要做的就是“阅读”。
-
@JesperJuhl OP 询问的是 GCC/Clang(大概在 Linux/x86-64 上)中的实现,而不是标准。
-
@walnut 是的,我想知道内联变量是如何在 gcc/clang 中实现的。我知道标准告诉他们什么
-
@walnut 我认为实现是基于弱符号的,所以每个目标文件中都会有一个定义,链接器只选择一个符号。我不明白这个变量是如何初始化的这要复杂得多,因为只需要初始化一个实例
标签: c++ gcc clang c++17 inline-variable