diff --git a/src/object.c b/src/object.c index 697ed6e39..a3687125b 100644 --- a/src/object.c +++ b/src/object.c @@ -1330,8 +1330,16 @@ size_t kvobjComputeSize(robj *key, kvobj *o, size_t sample_size, int dbid) { } size_t kvobjAllocSize(kvobj *o) { - /* All kv-objects has at least kvobj header and embedded key */ - size_t asize = zmalloc_size(kvobjGetAllocPtr(o)); + debugServerAssert(o->iskvobj); + size_t asize = sizeof(kvobj); + /* Add metadata size */ + asize += getNumMeta(o->metabits) * sizeof(uint64_t); + /* Add embedded key size */ + asize += 1; /* embedded key header size */ + asize += sdsAllocSize(kvobjGetKey(o)); + /* Add embedded string size */ + if (o->encoding == OBJ_ENCODING_EMBSTR) + asize += sdsAllocSize(o->ptr); if (o->type == OBJ_STRING) { asize += stringObjectAllocSize(o);