how to avoid memory leaking

Benjamin Thaut code at benjamin-thaut.de
Sun May 12 02:03:51 PDT 2013


Am 11.05.2013 01:18, schrieb maarten van damme:
> I'm trying to generate images and after displaying them I want to save
> them to a png file. I use parallelism to generate them asynchronously
> with the gui-thread to avoid blocking (don't know if this is really
> relevant).
>
> If I add a single line in the method where I generate the image that
> creates a class which allocates a pretty big array, slowly but surely
> the memory starts to rise until it ends in a spectacular out of memory
> exception. I always thought the garbage collector would deal with it.
>
> I tried reducing it but failed. Maybe I should let dustmite bite in it a
> bit later.
> How can I manually fix this? Is this a known bug in the garbage collector?
>
> btw, this code also caused segfaults on my  64 bit laptop on linux.
> How can I avoid this?
>
> main class:
> https://dl.dropboxusercontent.com/u/15024434/picturegenerator/generalised.d
>
> zip file with everything ready to go to compile:
> https://dl.dropboxusercontent.com/u/15024434/picturegenerator/picturegenerator.zip

Try allocating the big array with:

import core.memory;

size_t imageSize = 1024*1024*3;
auto imageData[] = (cast(ubyte*)GC.malloc(imageSize , 
GC.BlkAttr.NO_SCAN)[0..imageSize];

Which will result in the big memory block not beeing scanned by the GC 
which should reduce the number of false positives during collection.

If this doesn't work, use malloc / free of the c standard library to 
allocate and free the image data.

Kind Regards
Benjamin Thaut


More information about the Digitalmars-d-learn mailing list