On 06/28/2016 05:36 AM, Paolo Bonzini wrote: > > > On 28/06/2016 11:01, Peter Lieven wrote: >> this struct is approx 75kB >> >> Signed-off-by: Peter Lieven <[email protected]> >> --- >> qapi/qmp-input-visitor.c | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) > > Can you change the stack to a QSLIST instead? That's where most of the > waste comes from.
QmpInputVisitor has:
struct QmpInputVisitor
{
Visitor visitor;
/* Root of visit at visitor creation. */
QObject *root;
/* Stack of objects being visited (all entries will be either
* QDict or QList). */
StackObject stack[QIV_STACK_SIZE];
...
while QmpOutputVisitor has:
struct QmpOutputVisitor
{
Visitor visitor;
QStack stack; /* Stack of containers that haven't yet been finished */
QObject *root; /* Root of the output visit */
QObject **result; /* User's storage location for result */
};
The extra layer of indirection to a QStack vs. a direct array has
tradeoffs, but both Markus and I have commented in the past that both
files' stacks are rather wasteful, and we just have not had a reason to
improve them. This thread may be the reason :)
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
