AA rehash threshold
Jerry Quinn via Digitalmars-d
digitalmars-d at puremagic.com
Thu Nov 20 17:42:19 PST 2014
Steven Schveighoffer <schveiguy at yahoo.com> writes:
> On 11/20/14 5:30 PM, Jerry Quinn wrote:
>> This works nicely for small types, but has gotchas. For example, if
>> you've got an AA of ints, what value indicates that this is a value
>> folded into the bucket entry vs actually being a pointer? You'll need
>> extra space to make sure it's safe. Alignment is another concern.
>> Let's say you have bool for the entry/element flag. With ints you've
>> doubled the size of the bucket array.
>
> Hm.. the bucket entry will simply be what a node is now. You are actually
> saving space, because you don't need to store that extra pointer to the first
> node.
Almost. You do need a way to indicate that the bucket is empty. So you
need another flag though it can be smaller than a pointer (for 64 bit). But
the overhead is low except for things like ints.
> Where it gets dicey is when you rehash. Some of the nodes will be moved into
> the bucket space, some will move out of it. But I don't think it's a big deal,
> as a rehash doesn't happen very often.
True. Umm, that does raise a question - are addresses of AA contents
required to be stable? C++11 requires that of its hashtables. But it
ties your hands when trying to write customized hash tables.
More information about the Digitalmars-d
mailing list