hintonda added a comment. In https://reviews.llvm.org/D39436#912910, @zturner wrote:
> >> I haven't had time to really look into this, but it seems that maintaining >> two independent strings, one for directory and one for basename, is just for >> convenience. We could easily keep it in a single string with an index to >> basename. When the directory portion is updated, e.g., resolved, etc., we >> just overwrite the string and adjust the index. And adjust accessors as >> needed. > > The reason it's two strings is for memory efficiency and de-duplication. > Suppose you make `FileSpec` instances from `foo/bar/baz/` and > `foo/bar/buzz`. This gets separated into 4 instances of `ConstString`. > `foo/bar`, `baz`, `foo/bar`, and `buzz`. Because `ConstString`s are pooled, > there's actually only 3 strings here. `foo/bar`, `baz`, and `buzz`. > > It probably doesn't seem like a lot, but over the course of thousands and > thousands of files (which debuggers often examine and which often share a > common parent directory) this is a large memory savings. Ah, thanks for the explanation. https://reviews.llvm.org/D39436 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits