[libcxx-commits] [PATCH] D102727: Add a compiler option to make string resize/__resize_default_init use precise growth instead of amortized growth.

Evan Brown via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Tue May 18 14:37:45 PDT 2021

ezbr created this revision.
ezbr added a reviewer: EricWF.
ezbr requested review of this revision.
Herald added a project: libc++.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++.

In Google, we'd like to be able to test using precise growth rather than amortized growth in string resize methods in order to save memory. We intend to test internally and, assuming the effects are favorable, hopefully enable this behavior by default if possible in the future.

  rG LLVM Github Monorepo



Index: libcxx/include/string
--- libcxx/include/string
+++ libcxx/include/string
@@ -3276,9 +3276,12 @@
 basic_string<_CharT, _Traits, _Allocator>::resize(size_type __n, value_type __c)
     size_type __sz = size();
-    if (__n > __sz)
+    if (__n > __sz) {
+        if (__n > capacity()) __shrink_or_extend(__recommend(__n));
+        #endif
         append(__n - __sz, __c);
-    else
+    } else
@@ -3288,6 +3291,9 @@
     size_type __sz = size();
     if (__n > __sz) {
+      if (__n > capacity()) __shrink_or_extend(__recommend(__n));
+      #endif
        __append_default_init(__n - __sz);
     } else

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102727.346275.patch
Type: text/x-patch
Size: 841 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210518/c352de3d/attachment.bin>

More information about the libcxx-commits mailing list