You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::pmr同步池分配器如何复用单调缓冲资源的内存?

// allocate chunks of memory (starting with 10k) without deallocating:
std::pmr::monotonic_buffer_resource monotonic{10'000};


for (int j=0; j < 100; ++j) {
    std::pmr::synchronized_pool_resource pool{&monotonic};

    std::pmr::vector<std::pmr::string> coll{&pool};
    for (int i=0; i < 100; ++i) {
        coll.emplace_back("123");
    }
}

每次循环迭代中,pool是否应该复用monotonic分配器的内存?有资料指出这是可行的,但同步池资源是如何实现的?

我主要疑惑的是,单调资源本质上是“不可复用”的——除非被销毁,否则不会释放内存,这种情况下复用是如何实现的?

编辑补充:

我发现之前的理解有误。根据相关实验,必须将synchronized_pool_resource置于循环外,关键在于vector的析构函数:

std::pmr::monotonic_buffer_resource monotonic{1'024};
std::pmr::synchronized_pool_resource pool{&monotonic};

for (int j=0; j < 3; ++j) {    
    std::pmr::vector<std::pmr::string> coll{&pool};
    coll.emplace_back("123");
    std::cout << "Allocated at: " << coll.data() << "\n";
} 

输出结果:

Allocated at: 0x18e0680
Allocated at: 0x18e0680
Allocated at: 0x18e0680

这等效于调用pool.deallocate(ptr, N);,如相关回答所述。

内容的提问来源于stack exchange,提问作者Lorah Attkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:25:36