gpt4 book ai didi

c++ - 类管理器 - 内存池?

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

所以现在我有这样的东西(过于简单化):

class Person
{
unsigned int ID:
........
};

class ClassManager
{
std::vector<Person*> _Persons;

Person* create()
{
Person* person = new Person();
unsigned int id = _Persons.size();
person->ID = id;
_Persons.push_back(person);

}
Person* get(unsigned int ID)
{
return _Persions[ID];
}
};

我想知道这样的事情是否会更有效率:

class ClassManager
{
static const unsigned int DEFAULT_COUNT = 4
Person* memoryPool;
unsigned int count;
unsigned int index;

void init()
{
memoryPool = new Person[DEFAULT_COUNT];
count = DEFAULT_COUNT;
index = 0;

}

Person* create()
{
Person* person = &memoryPool[index];
person->ID = index;
index += 1;
return person;
}
Person* get(unsigned int ID)
{
return &memoryPool(ID);
}
};

....如果我需要更多人,我会调整内存池的大小。再一次,这只是我计划制作的一个非常简化的版本。我只有一堆这样的对象和每个对象的对象管理器,为每个对象管理器提供一个内存池可能比动态创建每个单独的对象(可能有数百个)更有效。

这会是更好的方法吗?谢谢。

最佳答案

第二种方法当然更有效。与分配大量对象相比,分配每个单个对象的成本更高。

您的代码示例中缺少的是在管理器的创建函数中处理池耗尽(可能是由于代码示例过于简单)。

此外,您可能需要考虑重用分配的对象,即在不再需要时重用 Person 实例。这将使您无需分配更多对象。

考虑为抽象对象的内存池使用模板类,并将这样的池类嵌入到每个对象管理器中——为该管理器的对象类型实例化。一旦不再需要某个对象,就应该将其返回给管理器并放入池中以供重用。

关于c++ - 类管理器 - 内存池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698199/

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