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は、このシナリオで使用するのに適切なインターフェイスですか?そうでない場合は、他にどのようにこの問題に取り組む必要がありますか?
ありがとう