私はメモリプールについて学んでおりboost::pool_allocator
、私のプロジェクトで利用しようとしています。ドキュメント に従って、時間コストについて小さなテストを行いました。
template <typename Alloc>
void test()
{
using namespace std::chrono;
auto t0 = high_resolution_clock::now();
for (int i = 0; i < 1000; ++i) {
std::vector<int, Alloc> vec;
for (int j = 0; j < 10000; ++j)
vec.push_back(i + j);
}
auto t1 = high_resolution_clock::now();
auto time_ms = duration<double>(t1 - t0).count() * 1e3;
cout << "time cost: " << time_ms << " ms" << endl;
}
int main()
{
test<std::allocator<int>>();
test<boost::pool_allocator<int>>();
}
結果は次のとおりです。
time cost: 3.97602 ms
time cost: 91.3943 ms
ブーストのドキュメントには次のように書かれています。
プールは通常、小さなオブジェクトの割り当てと割り当て解除が頻繁に行われる場合に使用されます。
boost::pool_allocator
したがって、上記のコードよりも時間がかからないと思いstd::allocator
ますが、テスト結果はそれがはるかに悪いことを示しています。
私はboost::pool_allocator
間違って使用していますか?メモリ プール (またはブースト プール/プール アロケータのみ) を使用すると、どのような状況でスピードアップが得られますか?