On Wednesday, 9 March 2016 at 15:14:02 UTC, Gerald Jansen wrote:
I've studied [1] and [2] but don't understand everything there.
Hence these dumb questions:
Given
enum n = 100_000_000; // some big number
auto a = new ulong[](n);
auto b = new char[8][](n);
struct S { ulong x; char[8] y; }
auto c = new S[](n);
will the large memory blocks allocated for a, b and/or c
actually be scanned for pointers to GC-allocated memory during
a garbage collection? If so, why?
I've just tested it with my GC tracker (
https://bitbucket.org/infognition/dstuff ), all 3 allocations go
with flags APPENDABLE | NO_SCAN which means these blocks will not
be scanned.
But if you define S as
struct S { ulong x; char[] y; }
so there is some pointer inside, then it gets allocated with just
APPENDABLE flag, i.e. it will be scanned then.