GC scan for pointers
Gerald Jansen via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Mar 11 10:34:06 PST 2016
On Thursday, 10 March 2016 at 10:58:41 UTC, thedeemon wrote:
> On Wednesday, 9 March 2016 at 15:14:02 UTC, Gerald Jansen wrote:
>> 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.
Thanks for the very clear answer. Adam too. This alleviates much
of my fear of GC performance issues for processing largish
datasets in memory with traditional loops, even with multiple
threads. Of course, it depends on wasting some memory to avoid
char[] fields, but that is often a reasonable trade-off for the
kind of data I need to process.
More information about the Digitalmars-d-learn
mailing list