I tried using gc.malloc and gc.free but got an invalidmemoryoperation exception when doing gc.free(data.ptr); Simply using gc.malloc like you proposed, the memory keeps growing. Is this a bug in the d garbage collector?
What's really strange though, is that the destructor of trueimagecolor (the class allocating the buffer) is getting called everytime... Does this mean that a destructor getting called still is no garantee that all data is getting free'd? 2013/5/12 Benjamin Thaut <[email protected]> > 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<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<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 >
