hokein added a comment. > In https://reviews.llvm.org/D53363#1267721, @hokein wrote: > >> Yeah, I have a rough patch for it, using char* will save us ~50MB memory, >> which will lead to ~300 MB memory usage in total. > > > For just the StringRef in SymbolLocation::Position, or for all our strings? > If the latter, that seems too low, as we should save strictly more than this > patch (unless I'm missing something about alignment/padding)
This is just for the StringRef in `Position`, I think it matches our estimation. More details coming: - 6.4 million refs, 6.4m * 40 bytes = ~250MB - 0.3 million symbols, 0.3m * 248 bytes = ~70MB The original size of `Ref` (before any space optimization) is 40 bytes, we save 8 bytes per refs, 8*6.5 = ~50 MB; If we change all StringRef in `Symbol` to `char*`, which will save 64 bytes (8*8) per sym, 64*0.3v = ~19 MB, which doesn't gain as much as refs, as refs contributes more than 70% memory. ================ Comment at: clangd/index/Index.h:66 const SymbolLocation::Position &R) { - return std::tie(L.Line, L.Column) == std::tie(R.Line, R.Column); + return std::make_tuple(L.line(), L.column()) == + std::make_tuple(R.Line, R.Column); ---------------- sammccall wrote: > Why only using the getters on one side? Oops, I mis-thought the type of the right side LSP position, fixed. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D53363 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits