静态(全局)对象的初始化是如何发生的

Gra*_*rak 5 c++ global-variables c++11

我试图弄清楚如何调用全局对象的构造函数.我知道在使用翻译单元的任何内容之前都会调用它们,我对此很好.我试图找出如何在Linux和Windows(x86和x64)中实现这一目标.

我似乎记得Windows(x86)使用链接列表进行构建和销毁,但我无法在此问题上找到任何资源.

我在相关主题上找到了以下材料,但似乎没有任何内容可以涵盖我正在寻找的内容.

和PE文件格式文件.

任何人都可以指出我找到这个信息的正确方向吗?

Dan*_*Dan 0

您认为全局构造函数必须在使用对象之前运行,这是错误的。我已经根据这个假设修复了许多错误,但事实并非如此。不适用于 gcc,不适用于 MSVC,当然不适用于 XCode。

你可以在gcc中指定一个属性((init_priority(X)))来强制执行顺序,

或 #pragma init_seg({ compiler | lib | user | "section-name" [, func-name]} ) for msvc。

使用 XCode 时,初始化代码按照目标文件传递给链接器的顺序运行。

我认为没有一个标准,即使有,也很少有人遵循它。由工具创建者决定如何跟踪初始化的内容和时间。