From 0b0f872f3f1536e30b2fab0b4297ea960d8247e1 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 7 May 2014 17:05:09 +0200 Subject: [PATCH] REDIS_ENCODING_EMBSTR_SIZE_LIMIT set to 39. The new value is the limit for the robj + SDS header + string + null-term to stay inside the 64 bytes Jemalloc arena in 64 bits systems. --- src/object.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/object.c b/src/object.c index 5602b688e..46f1f3f8b 100644 --- a/src/object.c +++ b/src/object.c @@ -76,8 +76,11 @@ robj *createEmbeddedStringObject(char *ptr, size_t len) { /* Create a string object with EMBSTR encoding if it is smaller than * REIDS_ENCODING_EMBSTR_SIZE_LIMIT, otherwise the RAW encoding is - * used. */ -#define REDIS_ENCODING_EMBSTR_SIZE_LIMIT 32 + * used. + * + * The current limit of 39 is chosen so that the biggest string object + * we allocate as EMBSTR will still fit into the 64 byte arena of jemalloc. */ +#define REDIS_ENCODING_EMBSTR_SIZE_LIMIT 39 robj *createStringObject(char *ptr, size_t len) { if (len <= REDIS_ENCODING_EMBSTR_SIZE_LIMIT) return createEmbeddedStringObject(ptr,len);