[libcxx-commits] [PATCH] D119972: [demangler] Improve buffer hysteresis
Nathan Sidwell via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Feb 28 11:37:46 PST 2022
urnathan updated this revision to Diff 411857.
urnathan added a comment.
separate unit test
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119972/new/
https://reviews.llvm.org/D119972
Files:
libcxxabi/src/demangle/Utility.h
llvm/include/llvm/Demangle/Utility.h
llvm/unittests/Demangle/OutputBufferTest.cpp
Index: llvm/unittests/Demangle/OutputBufferTest.cpp
===================================================================
--- llvm/unittests/Demangle/OutputBufferTest.cpp
+++ llvm/unittests/Demangle/OutputBufferTest.cpp
@@ -78,3 +78,15 @@
std::free(OB.getBuffer());
}
+
+TEST(OutputBufferTest, Extend) {
+ OutputBuffer OB;
+
+ char Massive[2000];
+ std::memset(Massive, 'a', sizeof(Massive));
+ Massive[sizeof(Massive) - 1] = 0;
+ OB << Massive;
+ EXPECT_EQ(Massive, toString(OB));
+
+ std::free(OB.getBuffer());
+}
Index: llvm/include/llvm/Demangle/Utility.h
===================================================================
--- llvm/include/llvm/Demangle/Utility.h
+++ llvm/include/llvm/Demangle/Utility.h
@@ -37,10 +37,10 @@
void grow(size_t N) {
size_t Need = N + CurrentPosition;
if (Need > BufferCapacity) {
- // Avoid many reallocations during startup, with a bit of hysteresis.
- constexpr size_t MinInitAlloc = 1024;
- if (Need < MinInitAlloc)
- Need = MinInitAlloc;
+ // Reduce the number of reallocations, with a bit of hysteresis. The
+ // number here is chosen so the first allocation will more-than-likely not
+ // allocate more than 1K.
+ Need += 1024 - 32;
BufferCapacity *= 2;
if (BufferCapacity < Need)
BufferCapacity = Need;
Index: libcxxabi/src/demangle/Utility.h
===================================================================
--- libcxxabi/src/demangle/Utility.h
+++ libcxxabi/src/demangle/Utility.h
@@ -37,10 +37,10 @@
void grow(size_t N) {
size_t Need = N + CurrentPosition;
if (Need > BufferCapacity) {
- // Avoid many reallocations during startup, with a bit of hysteresis.
- constexpr size_t MinInitAlloc = 1024;
- if (Need < MinInitAlloc)
- Need = MinInitAlloc;
+ // Reduce the number of reallocations, with a bit of hysteresis. The
+ // number here is chosen so the first allocation will more-than-likely not
+ // allocate more than 1K.
+ Need += 1024 - 32;
BufferCapacity *= 2;
if (BufferCapacity < Need)
BufferCapacity = Need;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119972.411857.patch
Type: text/x-patch
Size: 2131 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220228/b67e14ae/attachment.bin>
More information about the libcxx-commits
mailing list