On 8/3/21 5:15 AM, Gregor Mückl wrote:>
On Sunday, 1 August 2021 at 08:54:05 UTC, Kirill wrote:>
It's interesting to hear do you use D's GC? Or do you use your own custom memory management structure?
How performant is GC?
The reason I'm asking is I'm planning to dive into 3D game dev with D as a hobby in an attempt to create a game I dreamed of since I was a kid. I'd like to know if GC is worth using at all, or should I go with 100% manual memory management.
Any opinion is appreciated. Thanks in advance.
The D garbage collector seems reasonable for applications with small (object sized) allocations. But that changes when you allocate large blocks of memory: due to a bug internal to the tracking of allocated pages, performance gradually degrades over time. So if you have to allocate large(ish) buffers regularly, it'll show over time. I reported that bug here with a repro case, but it didn't get any attention yet:
I haven't managed to understand thag part of the GC enough to submit a patch myself :(.
Is that repro case doing what you think it is doing? It appears to keep adding more and more larger allocations to the mix.
It seems you are calculating a
size variable and never using it.
I think possibly you meant to use
size * 1024 * 1024 instead of
i * 1024 * 1024.
In regards to the conservative nature of the GC, the larger the blocks get, the more chances they get "accidentally" pointed at by the stack (or some other culprit). 64-bit memory space should alleviate a lot of this, but I think there are still cases where it can pin data unintentionally.