[pypy-commit] pypy stringbuilder-perf: Tweak: don't give a minimal size (if we know exactly how many chars

arigo noreply at buildbot.pypy.org
Thu Jun 12 14:10:12 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: stringbuilder-perf
Changeset: r72033:b28423c21e95
Date: 2014-06-12 14:09 +0200
http://bitbucket.org/pypy/pypy/changeset/b28423c21e95/

Log:	Tweak: don't give a minimal size (if we know exactly how many chars
	we need and it's less than 32). But resize more aggressively when
	we're still small.

diff --git a/rpython/rtyper/lltypesystem/rbuilder.py b/rpython/rtyper/lltypesystem/rbuilder.py
--- a/rpython/rtyper/lltypesystem/rbuilder.py
+++ b/rpython/rtyper/lltypesystem/rbuilder.py
@@ -54,12 +54,12 @@
 
     @enforceargs(None, int)
     def stringbuilder_grow(ll_builder, needed):
-        needed += 7
         try:
             needed = ovfcheck(needed + ll_builder.total_size)
         except OverflowError:
             raise MemoryError
-        needed &= ~7
+        needed += 63
+        needed &= ~63
         #
         new_piece = lltype.malloc(STRINGPIECE)
         charsize = ll_builder.charsize
@@ -68,7 +68,7 @@
         except OverflowError:
             raise MemoryError
         new_piece.piece_lgt = needed_chars
-        raw_ptr = lltype.malloc(rffi.CCHARP.TO, needed * charsize, flavor='raw')
+        raw_ptr = lltype.malloc(rffi.CCHARP.TO, needed_chars, flavor='raw')
         new_piece.raw_ptr = raw_ptr
         new_piece.prev_piece = ll_builder.extra_pieces
         ll_builder.extra_pieces = new_piece
@@ -201,7 +201,7 @@
 
     @classmethod
     def ll_new(cls, init_size):
-        init_size = max(min(init_size, 1280), 32)
+        init_size = min(init_size, 1280)
         ll_builder = lltype.malloc(cls.lowleveltype.TO)
         ll_builder.current_buf = cls.mallocfn(init_size)
         ofs = ll_baseofs(ll_builder.current_buf)


More information about the pypy-commit mailing list