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

Reply via email to