Review Request: Patch to reduce C++ memory consumption by removing DuContext* pointer from the AST

Alexander Dymo alexander.dymo at gmail.com
Mon Feb 15 11:48:02 UTC 2010


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/2938/
-----------------------------------------------------------

Review request for KDevelop.


Summary
-------

C++ parser's AST base class has "KDevelop::DUContext* ducontext" pointer which isn't used for most of the nodes. For example, the primary expression AST nodes do not open a new context and if your file is big, the memory is wasted.

This patch removes the context pointer from AST and instead fills a QMap<AST*, DuContext*> in the ParseSession class.

For me and my huge files this saves ~50M of memory.

Note, that the map will be ~2% slower than the pointer (when building uses for example). Performance testing results are below.


Diffs
-----

  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/contextbuilder.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/declarationbuilder.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/expressionparser.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/expressionvisitor.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/name_visitor.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/typebuilder.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/cppduchain/usebuilder.cpp 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/parser/ast.h 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/parser/parsesession.h 1090158 
  /trunk/extragear/sdk/kdevelop/languages/cpp/parser/parsesession.cpp 1090158 

Diff: http://reviewboard.kde.org/r/2938/diff


Testing
-------

All tests pass.

Optimization results: my test files:
before: 703M
after: 655M
48M saved


Performance testing:

kdevplatform:	peak memory	duchainify: visible-declarations	du: all-declarations-and-uses
before:		150M		52					79.35
after:		150M		52					81

kdevelop:	peak memory	duchainify: visible-declarations	du: all-declarations-and-uses
before:		98M		22.86					41.77
after:		98M		22.85					42.55

Performance regression for use-building is 2% due to this patch.
For KDevelop and KDevplatform projects where there are no huge files, this patch doesn't save any memory.


Thanks,

Alexander





More information about the KDevelop-devel mailing list