Does associative array change the location of values?
Andrey Zherikov
andrey.zherikov at gmail.com
Sat Oct 30 18:31:16 UTC 2021
On Saturday, 30 October 2021 at 00:52:23 UTC, Imperatorn wrote:
> On Saturday, 30 October 2021 at 00:49:04 UTC, Stanislav Blinov
> wrote:
>> On Friday, 29 October 2021 at 21:00:48 UTC, Steven
>> Schveighoffer wrote:
>>
>>> This is incorrect, the buckets are each heap allocated. Just
>>> the array of bucket pointers would change.
>>>
>>> In addition, AAs do not deallocate the key/value pairs ever.
>>> You are safe to obtain a pointer to a value and it will stay
>>> there, even if you remove the key.
>>>
>>
>> Who's going to document these implementation details? ;) I
>> mean, if no one, then the above shouldn't be stated. Wouldn't
>> you agree?
>>
>> Given the premise of the question at hand, it does seem useful
>> to know these. But at least one should stress what is and
>> isn't subject to change (even if unlikely).
>
> This should be documented for sure
I did small test and it printed the same values three times so
even rehash doesn't change the address of the value:
```d
long[long] aa = [0:0];
writeln(&aa[0]);
foreach(i; 0 .. 100_000_000)
aa[i]=i;
writeln(&aa[0]);
aa.rehash;
writeln(&aa[0]);
```
So it seems pretty safe to store a pointer to a value in AA. And
I agree that this should definitely be documented.
More information about the Digitalmars-d-learn
mailing list