From 906188e1cfb4a8b64928dc1d872e5aa05ceea87f Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Sat, 8 Dec 2018 22:14:41 +0100 Subject: [PATCH] json_object: speed up creation of objects Instead of using calloc(), call malloc() and initialize the relevant fields individually. speedup for 32-bit: ~15% speedup for 64-bit: ~ 5% --- json_object.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/json_object.c b/json_object.c index cea5245..9dd9c08 100644 --- a/json_object.c +++ b/json_object.c @@ -240,11 +240,14 @@ static struct json_object* json_object_new(enum json_type o_type) { struct json_object *jso; - jso = (struct json_object*)calloc(sizeof(struct json_object), 1); + jso = (struct json_object*)malloc(sizeof(struct json_object)); if (!jso) return NULL; jso->o_type = o_type; jso->_ref_count = 1; + jso->_pb = NULL; + jso->_user_delete = NULL; + jso->_userdata = NULL; #ifdef REFCOUNT_DEBUG lh_table_insert(json_object_table, jso, jso); MC_DEBUG("json_object_new_%s: %p\n", json_type_to_name(jso->o_type), jso); @@ -1034,7 +1037,7 @@ struct json_object* json_object_new_string(const char *s) jso->_to_json_string = &json_object_string_to_json_string; jso->o.c_string.len = strlen(s); if(jso->o.c_string.len < LEN_DIRECT_STRING_DATA) { - memcpy(jso->o.c_string.str.data, s, jso->o.c_string.len); + memcpy(jso->o.c_string.str.data, s, jso->o.c_string.len + 1); } else { jso->o.c_string.str.ptr = strdup(s); if (!jso->o.c_string.str.ptr) -- 2.50.1