gpt4 book ai didi

c++ - 使用带有 vector 作为成员变量的类的boost内存池

转载 作者:行者123 更新时间:2023-11-30 01:26:30 31 4
gpt4 key购买 nike

我正在尝试使用 boost::object_pool 将内存分配给包含 vector 作为成员变量的类型的对象。

class X{
std::vector<Type> v1;
std::vector<Type> v2;

int a;
double b;
..
};


void func()
{
boost::object_pool<X> p;
for (int i = 0; i < 10000; ++i)
{
X * const t = p.malloc();

}
}

现在 boost::object_pool 的构造函数使用 sizeof(X) 来计算 X 的大小,因此它无法确定成员变量 v1 和 v2 在运行时会增长。

  1. 我猜测这可能会导致将对象复制到不同的位置,这将导致性能下降而不是加速它,而这正是使用内存池的目的。我的猜测正确吗?如果不是,当 v1 和 v2 在运行时增长时还会发生什么?

  2. vector 类型(或任何其他在运行时增长的类型)的成员变量如何存放在内存中?对象是否包含指向堆中 vector 的指针而不是 vector 本身?我如何确保当 vector 增长时,它们使用池中的内存?

  3. 我在运行时创建了很多 X 类型的对象。 boost::object_pool 是适合在这种情况下使用的接口(interface)吗?如果不是,我应该如何解决这个问题?

谢谢

最佳答案

sizeof(v1) 和 sizeof(v2) 不会在运行时增长。它们在内部使用指针和堆分配。

如果您需要分配大量相同类型的对象,并且能够一次快速删除它们,那么池是合适的。

关于c++ - 使用带有 vector 作为成员变量的类的boost内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317430/

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