私は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();
}
}
は今のブースト:: object_poolのコンストラクタは、Xのサイズを見つけるためにはsizeof(X)を使用していますので、それは、メンバ変数v1とv2は、実行時に成長することを見つける方法はありません。
することは、私はそれがメモリプールを使用する目的だったそれをスピードアップするのではなく、パフォーマンスの低下につながる別の場所へのオブジェクトのコピーにつながることを推測しています。私の推測は正しいですか?そうでない場合、v1とv2が実行時に増加すると、何が起こりますか?
タイプベクトル(または実行時に増加する他のタイプ)のメンバ変数はどのようにメモリに格納されますか?オブジェクトはベクトル自体ではなく、ヒープ内のベクトルへのポインタを含んでいますか?ベクトルが大きくなると、プールからメモリを使用するようにするにはどうすればよいですか?
実行時にタイプXのオブジェクトをたくさん作成しています。 boost :: object_poolはこのシナリオで使用するのに適切なインターフェースですか?もしそうでなければ、私はこの問題に近づくでしょうか?
おかげ
はい、私は同じ種類のオブジェクトをたくさん割り当てています。ベクトルが大きくなると、プールからメモリを使用するようにするにはどうすればよいですか? – sank
ブーストには、ベクトルによって使用されるfast_pool_allocatorもあります。たくさんのベクトルを何度も割り当てたり削除したりすると、perfを向上させることができます。ベクトルはすでに非常に効率的ですので、私は注意してこれを測定します。 –