1

私はメモリプールについて学んでおり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間違って使用していますか?メモリ プール (またはブースト プール/プール アロケータのみ) を使用すると、どのような状況でスピードアップが得られますか?

4

2 に答える 2