summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2022-09-06 10:58:55 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2022-09-06 10:58:55 -0300
commit69b77b6fde32cdf5dcaeeb92996bf6c4697e0b4f (patch)
treee55a5cee9fb21522015f710712577c23243e2be2
parent997f11f54322883c3181225f29d101a597f31730 (diff)
downloadlua-github-69b77b6fde32cdf5dcaeeb92996bf6c4697e0b4f.tar.gz
Changed the growth rate of string buffers
The growth rate of string buffers was reduced from 2 to 1.5 (3/2). As string buffers start larger (256~1024 bytes), they don't need to grow that fast. Moreover, a lower rate allows multiplicative growth up to larger sizes (3/2 of the maximum). (After that, the growth becomes linear, which is mostly useless.)
-rw-r--r--lauxlib.c8
-rw-r--r--luaconf.h5
2 files changed, 7 insertions, 6 deletions
diff --git a/lauxlib.c b/lauxlib.c
index cba5df9b..4ca6c654 100644
--- a/lauxlib.c
+++ b/lauxlib.c
@@ -526,14 +526,14 @@ static void newbox (lua_State *L) {
/*
** Compute new size for buffer 'B', enough to accommodate extra 'sz'
-** bytes. (The test for "double is not big enough" also gets the
-** case when the multiplication by 2 overflows.)
+** bytes. (The test for "not big enough" also gets the case when the
+** computation of 'newsize' overflows.)
*/
static size_t newbuffsize (luaL_Buffer *B, size_t sz) {
- size_t newsize = B->size * 2; /* double buffer size */
+ size_t newsize = (B->size / 2) * 3; /* buffer size * 1.5 */
if (l_unlikely(MAX_SIZET - sz < B->n)) /* overflow in (B->n + sz)? */
return luaL_error(B->L, "buffer too large");
- if (newsize < B->n + sz) /* double is not big enough? */
+ if (newsize < B->n + sz) /* not big enough? */
newsize = B->n + sz;
return newsize;
}
diff --git a/luaconf.h b/luaconf.h
index fcc0018b..e4650fbc 100644
--- a/luaconf.h
+++ b/luaconf.h
@@ -747,14 +747,15 @@
/*
@@ LUA_IDSIZE gives the maximum size for the description of the source
-@@ of a function in debug information.
+** of a function in debug information.
** CHANGE it if you want a different size.
*/
#define LUA_IDSIZE 60
/*
-@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
+@@ LUAL_BUFFERSIZE is the initial buffer size used by the lauxlib
+** buffer system.
*/
#define LUAL_BUFFERSIZE ((int)(16 * sizeof(void*) * sizeof(lua_Number)))