我查看了头文件和 从我对源代码的阅读来看,似乎应该使用
我正试图调查两个分配器之间性能差异的原因,如https://en.cppreference.com/w/cpp/memory/monotonic_buffer_resource.到目前为止我发现了什么:
根据编译器资源管理器的说法,在GCC中,默认的pmr分配器似乎使用monotonic_buffer_resource
,而不是std分配器
libstdc++
的源代码,但找不到如何monotonic_buffer_resource
已选择由默认pmr分配器使用std::pmr::new_delete_resource()
,这应该使默认的std分配器和默认的pmr分配器相同,但显然不是void default_pmr_alloc() {
std::pmr::list<int> list; // uses monotonic_buffer_resource
for (int i{}; i != total_nodes; ++i) {
list.push_back(i);
}
}
void default_std_alloc() {
std::list<int> list; // uses operator new/delete
for (int i{}; i != total_nodes; ++i) {
list.push_back(i);
}
}
它确实使用了new_delete_resource
。(来自std::pmr::get_default_resource()
(
您可以通过进行检查
list.get_allocator().resource()->is_equal(*std::pmr::new_delete_resource()); // true
https://godbolt.org/z/qGTG57MfY
不确定基准是什么,但类型擦除会有自己的惩罚,pmr
可能会更慢。