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