首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::pool_allocator明显慢于std::allocator

boost::pool_allocator明显慢于std::allocator
EN

Stack Overflow用户
提问于 2022-02-10 07:38:07
回答 1查看 426关注 0票数 1

我正在学习内存池,并试图在我的项目中使用boost::pool_allocator。根据文献资料的说法,我做了一个关于时间成本的小测试:

代码语言:javascript
复制
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>>();
}

结果是:

代码语言:javascript
复制
time cost: 3.97602 ms
time cost: 91.3943 ms

助推医生说:

当小对象有大量的分配和去分配时,通常使用池。

因此,我预计boost::pool_allocator比上面代码中的std::allocator花费更少的时间,但是测试结果显示它更糟糕。

我用错了boost::pool_allocator吗?在什么情况下,我可以通过使用内存池(或者仅仅是Boost池/缓冲池_分配程序)来获得加速?

EN

回答 1

Stack Overflow用户

发布于 2022-02-10 07:43:03

当小对象有大量的分配和去分配时,通常使用池。

vector不分配“小对象”。vector<T>分配数组。或者更具体地说,在内存块中分配的单个数组足够大,足以容纳(至少) sizeof(T) * size字节。

在这种分配模式中,池分配器非常糟糕。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71061315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档