c++ - 内联静态数据的初始化

标签 c++ gcc clang c++17 inline-variable

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

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

有谁知道实现的工作原理?

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

最佳答案

该实现等效于局部函数静态函数的实现,该函数还会重复初始化“风险”:创建了一个附加的保护变量并进行检查以使初始化仅发生一次。这个过程的assembly非常简单。

关于c++ - 内联静态数据的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030083/

相关文章:

clang - 糟糕的 rand() 实现

c++ - 如何定义矩阵-矩阵乘法,使其也适用于 vectorXvector、vectorXmatrix 和 matrixXvector?

c++ - C++中的别名变量数组

linux - 在自定义工具中使用 traceroute 时出现编译问题

gcc - 针对 openmp 的静态链接

c++ - 返回 ARM NEON 下的 Z 标志

c++ - 用 C++11 编写通用内存函数

c++ - Arduino C++,奇怪的数组行为

编译器 arm-none-eabi-gcc v4.9.3 优化指针的 away 操作

c++ - 在 OS X 上忽略来自框架 header 的警告