假设我构建了一个简单的 DLL,由两个翻译单元组成:
第一的
// foo.cpp
struct Foo
{
//...
} g_foo;
// ... other stuff
第二个
// bar.cpp
struct Bar
{
//...
} g_bar;
// ... other stuff
我知道 C++ 标准没有指定全局变量初始化的顺序这一事实。问题是:一旦我构建了 Windows DLL,在LoadLibrary
调用期间执行的全局变量初始化的顺序是确定性的(每次LoadLibrary
调用都会以相同的顺序启动变量的初始化g_foo
)g_bar
还是可能取决于某些加载器/系统设置?