rustdoc: Rearrange Item/ItemInner.
The `Item` struct is 48 bytes and contains a `Box<ItemInner>`; `ItemInner` is 104 bytes. This is an odd arrangement. Normally you'd have one of the following. - A single large struct, which avoids the allocation for the `Box`, but can result in lots of wasted space in unused parts of a container like `Vec<Item>`, `HashSet<Item>`, etc. - Or, something like `struct Item(Box<ItemInner>)`, which requires the `Box` allocation but gives a very small Item size, which is good for containers like `Vec<Item>`. `Item`/`ItemInner` currently gets the worst of both worlds: it always requires a `Box`, but `Item` is also pretty big and so wastes space in containers. It would make sense to push it in one direction or the other. #138916 showed that the first option is a regression for rustdoc, so this commit does the second option, which improves speed and reduces memory usage.
This commit is contained in:
parent
aa8f0fd716
commit
ffee55c18c
8 changed files with 48 additions and 39 deletions
|
|
@ -43,7 +43,7 @@ impl JsonRenderer<'_> {
|
|||
let attrs = item.attributes(self.tcx, self.cache(), true);
|
||||
let span = item.span(self.tcx);
|
||||
let visibility = item.visibility(self.tcx);
|
||||
let clean::Item { name, item_id, .. } = item;
|
||||
let clean::ItemInner { name, item_id, .. } = *item.inner;
|
||||
let id = self.id_from_item(&item);
|
||||
let inner = match item.kind {
|
||||
clean::KeywordItem => return None,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue