我正在尝试使用 boost::object_pool 将内存分配给包含向量作为成员变量的类型的对象。
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 会在运行时增长。
我猜测它可能会导致将对象复制到不同的位置,这将导致性能损失,而不是加速它,这是使用内存池的目的。我的猜测正确吗?如果不是,当 v1 和 v2 在运行时增长时还会发生什么?
类型向量(或在运行时增长的任何其他类型)的成员变量是如何在内存中放置的?对象是否包含指向堆中向量的指针而不是向量本身?如何确保当向量增长时,它们使用池中的内存?
我在运行时创建了很多 X 类型的对象。boost::object_pool 是在这种情况下使用的适当接口吗?如果不是,我该如何解决这个问题?
谢谢