[libcxx-commits] [libcxx] [libc++] Optimize __tree copy/move constructor/assignment with allocator (PR #163558)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Nov 7 02:52:32 PST 2025
================
@@ -103,6 +107,61 @@ void associative_container_benchmarks(std::string container) {
}
});
+ bench("ctor(const&, alloc)", [=](auto& st) {
+ const std::size_t size = st.range(0);
+ std::vector<Value> in = make_value_types(generate_unique_keys(size));
+ Container src(in.begin(), in.end());
+ ScratchSpace c[BatchSize];
+
+ while (st.KeepRunningBatch(BatchSize)) {
+ for (std::size_t i = 0; i != BatchSize; ++i) {
+ new (c + i) Container(src, typename std::allocator<typename Container::value_type>());
+ benchmark::DoNotOptimize(c + i);
+ benchmark::ClobberMemory();
+ }
+
+ st.PauseTiming();
+ for (std::size_t i = 0; i != BatchSize; ++i) {
+ reinterpret_cast<Container*>(c + i)->~Container();
+ }
+ st.ResumeTiming();
+ }
+ });
+
+ bench("ctor(&&, different allocs)", [=](auto& st) {
+ using PMRContainer = adapt_operations<Container>::template rebind_alloc<
+ std::pmr::polymorphic_allocator<typename Container::value_type>>;
+
+ const std::size_t size = st.range(0);
+ std::vector<Value> in = make_value_types(generate_unique_keys(size));
+ std::pmr::monotonic_buffer_resource rs(524288 * 32);
----------------
philnik777 wrote:
I'm not quite sure anymore how I got to this number. I've replaced it with something less magic which should be good enough.
https://github.com/llvm/llvm-project/pull/163558
More information about the libcxx-commits
mailing list