mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
qobject/json-writer: preallocate output buffer
json_writer_new() creates the output GString with g_string_new(NULL), which starts at the GLib default of 64 bytes. Serializing typical QMP responses then requires multiple reallocations as the buffer grows -- for query-qmp-schema the GString is reallocated 12+ times. Preallocate JSON_WRITER_INITIAL_SIZE (4096) bytes. This covers most QMP responses without any reallocation. The JSONWriter is a short-lived object so the preallocation does not accumulate. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Bin Guo <guobin@linux.alibaba.com> Message-ID: <20260603022538.92780-1-guobin@linux.alibaba.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
committed by
Markus Armbruster
parent
a59157f98f
commit
a21232a255
@@ -24,13 +24,16 @@ struct JSONWriter {
|
||||
GByteArray *container_is_array;
|
||||
};
|
||||
|
||||
/* Should cover most QMP responses without reallocation */
|
||||
#define JSON_WRITER_INITIAL_SIZE 4096
|
||||
|
||||
JSONWriter *json_writer_new(bool pretty)
|
||||
{
|
||||
JSONWriter *writer = g_new(JSONWriter, 1);
|
||||
|
||||
writer->pretty = pretty;
|
||||
writer->need_comma = false;
|
||||
writer->contents = g_string_new(NULL);
|
||||
writer->contents = g_string_sized_new(JSON_WRITER_INITIAL_SIZE);
|
||||
writer->container_is_array = g_byte_array_new();
|
||||
return writer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user