From: Ramiro Polla Date: Sat, 24 Nov 2018 02:36:51 +0000 (+0100) Subject: json_object_private: save 8 bytes in struct json_object in 64-bit architectures X-Git-Tag: json-c-0.14-20200419~104^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5bb5e2e8fcf9f1b9ae4562c2bc08929317068f78;p=json-c json_object_private: save 8 bytes in struct json_object in 64-bit architectures - there is no need for _ref_count to be uint_fast32_t (the compiler might decide to use a 64-bit int). make it uint32_t instead. - reorder the 32-bit integer fields (o_type and _ref_count) so that there is no wasted 4-byte gap after each of them. --- diff --git a/json_object.c b/json_object.c index 8a86bc6..3af69fc 100644 --- a/json_object.c +++ b/json_object.c @@ -171,7 +171,7 @@ extern struct json_object* json_object_get(struct json_object *jso) if (!jso) return jso; // Don't overflow the refcounter. - assert(jso->_ref_count < UINT_FAST32_MAX); + assert(jso->_ref_count < UINT32_MAX); #if defined(HAVE_ATOMIC_BUILTINS) && defined(ENABLE_THREADING) __sync_add_and_fetch(&jso->_ref_count, 1); diff --git a/json_object_private.h b/json_object_private.h index 51134b6..4c6681a 100644 --- a/json_object_private.h +++ b/json_object_private.h @@ -27,9 +27,9 @@ typedef void (json_object_private_delete_fn)(struct json_object *o); struct json_object { enum json_type o_type; + uint32_t _ref_count; json_object_private_delete_fn *_delete; json_object_to_json_string_fn *_to_json_string; - uint_fast32_t _ref_count; struct printbuf *_pb; union data { json_bool c_boolean;