std::hashmap: Tighter representation for the Bucket#9212
Closed
bluss wants to merge 1 commit intorust-lang:masterfrom
bluss:tighter-bucket
Closed
std::hashmap: Tighter representation for the Bucket#9212bluss wants to merge 1 commit intorust-lang:masterfrom bluss:tighter-bucket
bluss wants to merge 1 commit intorust-lang:masterfrom
bluss:tighter-bucket
Conversation
Replace `Option<Bucket<K, V>>` with a custom
`enum Bucket { Unused, Filled(hash, key, value) }`. The non-nullable
pointer optimization for enums with two variants will be active with the
new representation, while it was not with the old. This is if either
K or V is a non-nullable pointer type.
With these changes, now `Bucket<int,int>` is 32 bytes and
`Bucket<~str,int>` is 24 bytes on 64-bit, so we save the 8 bytes of enum
tag per bucket.
Contributor
|
I think we should just make the the |
Contributor
|
cc @jld |
Contributor
|
We probably should improve the optimization. (And that should get its own issue if it doesn't have one yet.) The monomorphizer would need to know enough about whatever |
Contributor
Contributor
Author
|
Closing this Pull unmerged, in favor of the linked issue I opened. |
flip1995
pushed a commit
to flip1995/rust
that referenced
this pull request
Jul 31, 2023
New lint [`four_forward_slashes`] Closes rust-lang#9212 changelog: New lint [`four_forward_slashes`]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replace
Option<Bucket<K, V>>with a customenum Bucket { Unused, Filled(hash, key, value) }. The non-nullablepointer optimization for enums with two variants will be active with the
new representation, while it was not with the old. This is if either
K or V is a non-nullable pointer type.
With these changes, now
Bucket<int,int>is 32 bytes (like before) butBucket<~str,int>is 24 bytes on 64-bit, so we save the 8 bytes of enumtag per bucket.