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