[LLVMbugs] [Bug 11686] New: Overload candidate computation is a space hog
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Sun Jan 1 09:43:37 PST 2012
http://llvm.org/bugs/show_bug.cgi?id=11686
Bug #: 11686
Summary: Overload candidate computation is a space hog
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: benny.kra at gmail.com
CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
Classification: Unclassified
The data structures to store conversion sequences are way too big:
StandardConversionSequence: 48 bytes
UserDefinedConversionSequence: 120 bytes
AmbiguousConversionSequence: 80 bytes
BadConversionSequence: 32 bytes
ImplicitConversionSequence: 128 bytes (union of the last 4 structs + 8 extra
bytes)
OverloadCandidate.Conversions: 544 bytes
(SmallVector<ImplicitConversionSequence, 4>)
OverloadCandidate: 752 bytes
To make matters worse we store the OverloadCandidates in a SmallVector. On a
large source file vector reallocation can easily churn through gigabytes of
memory. malloc on OSX seems not to aggressively reuse memory so we end up
wasting a ton of memory in some cases (I haven't really tracked down what's
causing this though).
Some possible solutions:
- Bit pack structs better (not many opportunities there), reduce SmallVector
size
- Pool allocate OverloadCandidates. llvm's SpecificBumpPtrAllocator doesn't
support iteration, but that can be added.
- Enhance the candidate computation to be lazier (not sure if this is feasible)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list