On Thursday, 2 June 2022 at 05:04:03 UTC, Salih Dincer wrote:
Hi,
Do I misunderstand? A dynamic array is allocated memory
according to the `nextpow2()` algorithm(-1 lapse); strings, on
the other hand, don't behave like this...
```d
string str = "0123456789ABCDEF";
char[] chr = str.dup;
assert(str.length == 16);
assert(str.capacity == 0);
import std.math: thus = nextPow2; //.algebraic
assert(chr.capacity == thus(str.length) - 1);
assert(chr.capacity == 31);
You've initialized `str` with a string literal. No memory is
allocated for these from the GC. They're stored in the binary,
meaning they're loaded into memory from disk by the OS. So
`str.ptr` points to a static memory location that's a fixed size,
hence no extra capacity.
`chr` is allocated from the GC using whatever algorithm is
implemented in the runtime. That it happens to be any given
algorithm is an implementation detail that could change in any
release.
```
Also, `.ptr` keeps the address of the most recent first
element, right?
More specifically, it points to the starting address of the
allocated block of memory.