【发布时间】:2012-05-06 05:48:21
【问题描述】:
我正在尝试使用 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 是在这种情况下使用的适当接口吗?如果不是,我应该如何解决这个问题?
谢谢
【问题讨论】:
标签: c++ memory-management