gpt4 book ai didi

c++ - 内存分配器范围的设计

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:21 24 4
gpt4 key购买 nike

我一直在阅读关于内存管理的不同文章,为我希望我的架构如何工作做准备,我最担心的是如何在整个代码库中使用、创建和处理分配器。问题之一是我的设计总是在全局范围内具有分配器,因为我没有典型的单例设计来包含分配器,它们没有真正的居住地。由于使用全局变量的所有典型问题,我想避免为此使用全局变量。

这让我想到了这样的设计

void* operator new(size_t size, uint32_t type)
{
return gAllocator.Alloc(size, type);
}

这将导致头文件中只有新定义,声明在 .cpp 中。然后,此 .cpp 文件将具有 gAllocator,仅在 .cpp 文件中(并且可以在除新调用之外的其他地方访问。

如果我的设计是这样,gAllocator 是否仍然是一个全局变量,如果不是,它会被认为是什么类型的变量?如果它只是在命名空间的范围内怎么办?

最佳答案

看起来普通的全局变量正是您想要的。作为回顾,在 C++ 中,全局(或单例)应该是 inline 函数中的局部 static 变量。

class myAllocator {
public:
static myAllocator &getDefaultInstance() {
static myAllocator theInstance( parameters );
return theInstance;
}
};

这样,对象在第一次使用时被初始化。如果您使用典型的 header 声明 + .cpp 定义,则相对于其他全局变量的初始化顺序是未定义的,可能会产生不可预测的后果。 (“静态初始化顺序惨败”。)

关于c++ - 内存分配器范围的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986243/

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