gpt4 book ai didi

c++ - 全局变量什么时候分配内存?

转载 作者:可可西里 更新时间:2023-11-01 17:39:42 29 4
gpt4 key购买 nike

这件事困扰了我一段时间,但我没有找到任何关于这件事的好资源。我的代码中有一些全局变量。很明显,它们是按某种顺序初始化的,但是在进行任何初始化之前是否为所有这些对象保留了所需的内存?

这是我的代码中可能出现的错误以及我如何使用答案的简单示例:

我有一个 map<RTTI, object*> objectPool它包含我代码中每个类的样本,我用它从文件中加载对象。为了创建这些示例,我使用一些全局变量来将类实例引入 objectPool。但有时这些示例实例是在 ObjectPool 本身之前初始化的。这会产生运行时错误。

为了修复这个错误,我使用了一些延迟初始化器 map<RTTI,object*>* lateInitializedObjectPool; .现在每个实例首先检查objectPool是否被初始化,如果没有初始化它然后将自己引入对象池。它似乎工作正常,但我担心即使对象池指针所需的内存在其他类开始 self 介绍之前也没有保留,这可能会导致访问冲突。

最佳答案

在命名空间范围内声明的变量(与在类或函数中相反)具有由可执行文件(或 DLL)加载程序分配的对象本身的空间(sizeof(ObjectType))。如果对象是一个使用聚合初始化的 POD,那么它通常通过让链接器将这些值直接写入可执行文件和 exe 的加载器简单地将所有这些值加载到内存中来设置它的值。不使用聚合初始化的对象最初会将其值清零。

在所有这些之后,如果这些对象中的任何一个具有构造函数,那么这些构造函数将在 main 运行之前执行。因此,如果这些构造函数中的任何一个动态分配内存,那就是他们这样做的时候。在加载可执行文件之后,但在运行 main 之前。

关于c++ - 全局变量什么时候分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6504611/

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