gpt4 book ai didi

C++ 编译器在 main 之后实现动态初始化

转载 作者:太空狗 更新时间:2023-10-29 23:19:02 29 4
gpt4 key购买 nike

C++ 标准第 3.6.2 节第 3 段指出,非本地对象的动态初始化是否发生在 main() 的第一条语句之后是实现定义的。

有谁知道这样做的基本原理是什么,以及哪些编译器以这种方式推迟非局部对象初始化?我最熟悉 g++,它在进入 main() 之前执行这些初始化。

这个问题是相关的:Dynamic initialization phase of static variables但我特别想问的是,已知哪些编译器会以这种方式运行。

这一段的唯一理由可能是支持在运行时加载动态库,但我认为标准没有考虑动态加载问题。

最佳答案

其中一个原因可能是:

static char data[1000000000000000000000000000000];

void main(int argc)
{
if (argc > 0)
data[0] = 0;
}

只有当确实需要时才分配和初始化这个静态数组可能是合理的。某些应用程序可能会遇到类似的情况,并且有足够的发言权来说服委员会。根据我自己使用 C# 的经验,我遇到过类的静态成员在 jitting 类后没有立即分配的情况。它们是在第一次使用时一个一个分配的。在那种情况下,绝对没有理由这样做。这简直就是一场灾难。也许他们现在解决了这个问题。

其他原因也是可能的。

关于C++ 编译器在 main 之后实现动态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111568/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com