hashbrown icon indicating copy to clipboard operation
hashbrown copied to clipboard

Support lower maximum size

Open overlookmotel opened this issue 1 year ago • 1 comments

HashMap, HashSet and HashTable are currently all 32 bytes.

Would you consider supporting a lower maximum size? For many use cases, a size limit of ~4 billion items is sufficient, so using u32 for items, bucket_mask and growth_left would suffice. This would reduce the size of the types to 24 bytes.

This may not seem a significant gain, but when using a great number of HashMaps, with a large proportion of them empty and unallocated, the overhead adds up to a significant % of total memory usage.

This could be implemented either as a feature or generic.

If you'd be willing to accept a PR for this, I'd be happy to work one up.

overlookmotel avatar Jul 14 '24 14:07 overlookmotel

As a user, you can also add indirection like Option<Box<HashMap<...>>> so it's only a pointer-sized None when empty. That's more of a hassle to actually use, of course, but you could hide that in a wrapper for your specific use-cases.

cuviper avatar Sep 05 '24 21:09 cuviper