From 7c9333f8786165e355040398b9bfa047d021e9ed Mon Sep 17 00:00:00 2001 From: Yuwei Zhao Date: Sat, 13 Sep 2025 05:31:57 +0800 Subject: [PATCH] Perf: Optimize function append in include/spdlog/fmt/bundled/base.h --- include/spdlog/fmt/bundled/base.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/spdlog/fmt/bundled/base.h b/include/spdlog/fmt/bundled/base.h index 87b3fd7c..babbbe9e 100644 --- a/include/spdlog/fmt/bundled/base.h +++ b/include/spdlog/fmt/bundled/base.h @@ -1828,10 +1828,13 @@ template class buffer { void append(const U* begin, const U* end) { while (begin != end) { - auto count = to_unsigned(end - begin); - try_reserve(size_ + count); auto free_cap = capacity_ - size_; - if (free_cap < count) count = free_cap; + auto count = to_unsigned(end - begin); + if (free_cap < count) { + try_reserve(size_ + count); + free_cap = capacity_ - size_; + count = std::min(count, free_cap); + } // A loop is faster than memcpy on small sizes. T* out = ptr_ + size_; for (size_t i = 0; i < count; ++i) out[i] = begin[i];