Am 11.05.2013 01:18, schrieb maarten van damme:Try allocating the big array with:
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
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