C Memory
Mike Parker
aldacron at gmail.com
Sun May 12 02:31:31 PDT 2013
I should expand a bit. The heart of the issue in this case is
that you need precise control over the order of deallocation:
resource allocated through the shared libraries need to be
deallocated before the libraries are unloaded. Even without the
static module destructors, you can't rely on normal destructors
to do that.
I could just entirely skip unloading the libraries. The OS should
handle that automatically when the process exits, meaning the GC
should have done its final shutdown by then. I've thought about
implementing such a change before, as this issue keeps cropping
up around Derelict because so many people start out relying on
D's destructors to release memory for them. Then again, the up
side is that it highlights one of the issues of relying on
destructors for this sort of thing. Another being that your
SDL_Surface might never be deallocated at all until the app exits
if you only rely on destructors, which could have a negative
impact in a long running game. And yet another being that the GC
doesn't know about the memory your SDL_Surface points to and
could happily destruct your object, thereby freeing the surcface,
while another pointer to it exists somewhere else in the program.
Better just to use a terminate chain.
More information about the Digitalmars-d-learn
mailing list