On 1/4/23 2:27 PM, Ali Çehreli wrote:
On 1/4/23 10:48, H. S. Teoh wrote:
> Allocations are not necessarily consecutive; the GC may have its own
> strategy of allocation that doesn't follow a linear sequence.
That was one of my guesses. So, I put the objects into a 2-length static
array but the difference was still 0x20. (?)
Are you putting the class *references* in a 2-length static array?
That's just going to be 2 pointers in an array, and won't affect where
they are allocated on the heap.
> Furthermore, GC-allocated blocks may be larger than the request size
> because there may be some extra management information stored in the
> block (but outside the pointer range returned).
Good point. I think the minimum size of a dynamically allocated memory
of the current GC implementation is 32 bytes.
It is 16 bytes, but there are no 24-byte bins. Here are the bin sizes:
https://github.com/dlang/dmd/blob/4dc7259a89950b0a0feda05b8c35e52cadd00c95/druntime/src/core/internal/gc/impl/conservative/gc.d#L1402-L1424
And of course, this could change again.
Basically, follow H. S. Teoh's advice, stop worrying about the addresses
given out by the GC, it's not important.
-Steve