将升压内存池与以向量作为成员变量的类一起使用
Using boost memory pool with a class with vectors as member variables
我正在尝试使用 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 是否是在此方案中使用的合适接口?如果不是,我该如何处理这个问题?
谢谢
sizeof(v1) 和 sizeof(v2) 在运行时不会增长。它们在内部使用指针和堆分配。
如果您需要分配大量相同类型的对象,并且能够一次快速删除它们,则池是合适的。
你有一些不正确的假设。由于 std::vector
中的基础数组位于堆上,因此sizeof()
永远不会更改。boost::object_pool
根本不应该有任何复制.至于这是否适合您,这取决于您计划创建和销毁X
对象的频率。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组