[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kdevelop-devel
Subject:    Re: Review Request: Patch to reduce C++ parser memory consumption
From:       "David Nolden" <zwabel+reviewboard () gmail ! com>
Date:       2009-12-22 23:15:10
Message-ID: 20091222231510.15887.10404 () localhost
[Download RAW message or body]


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

Ship it!


Generally it looks ok. The only problem I see with letting the "ast" zero at the \
beginning is that we have to make absolutely sure the "UPDATE_POS(..)" stuff will \
never be reached as long as it's zero.

- David


On 2009-12-21 23:27:42, Alexander Dymo wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.kde.org/r/2436/
> -----------------------------------------------------------
> 
> (Updated 2009-12-21 23:27:42)
> 
> 
> Review request for KDevelop.
> 
> 
> Summary
> -------
> 
> KDevelop C++ parser may consume a lot of memory because it sometimes creates AST \
> nodes on the pool which aren't used later. For example, in some cases it tries to \
> parse simple type specifier, creates a node for it, then decides that the stuff \
> under the cursor isn't a type specifier and returns from the method leaving AST \
> node in the pool. Other methods (parseName, parsePrimaryExpression, etc.) have the \
> same mistake. 
> Usually that's not the problem, but I have a 4M file which consists solely from \
> array variable definitions with initializations. There're ~1 million integers for \
> those arrays in the file and parser tries to figure out whether each of those \
> integers is a type specifier. Of course they are not and the parser left ~100M of \
> unused SimpleTypeSpecifierAST nodes. Same happened in other methods. 
> This patch fixes the problem, but it needs review (David?, Hamish?). I just don't \
> know C++ parser enough to be sure I didn't break anything. 
> Also, this patch doesn't fix all such problems. If my change is correct, I'll \
> continue with fixing the remaining places. 
> 
> Diffs
> -----
> 
> /trunk/extragear/sdk/kdevelop/languages/cpp/parser/parser.cpp 1064830 
> 
> Diff: http://reviewboard.kde.org/r/2436/diff
> 
> 
> Testing
> -------
> 
> On my installation, 4 duchain tests were broken before this change. After this \
> change I got no new broken tests. 
> Performance and memory consumption investigation:
> 
> == parsing my test file ==
> before:	552M	3.84 sec
> after:	364M	3.59 sec
> 
> == parsing the whole kdevplatform ==
> before:	299M	92.93 sec
> after:	291M	92.75 sec
> 
> Result: memory consumption decreased by 35% in my case and 3% in case of \
> kdevplatform. As a side effect, the parser became a bit faster. 
> 
> Thanks,
> 
> Alexander
> 
> 


-- 
KDevelop-devel mailing list
KDevelop-devel@kdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic