Memory leaks

develop32 develop32 at gmail.com
Sun Oct 13 07:23:57 PDT 2013


On Sunday, 13 October 2013 at 14:13:39 UTC, Benjamin Thaut wrote:
> Am 13.10.2013 15:52, schrieb develop32:
>> On Sunday, 13 October 2013 at 13:18:47 UTC, Benjamin Thaut 
>> wrote:
>>> Am 13.10.2013 14:08, schrieb develop32:
>>>> Windows task manager shows constantly increasing memory 
>>>> usage of my D
>>>> application, yet there is ZERO allocation done by it at the 
>>>> time. I have
>>>> made a hook inside the rt/lifetime.d for _d_allocmemory, and 
>>>> I do get
>>>> notified when an array or a class object in constructed.
>>>> What could be the source of rapidly climbing (hundred 
>>>> kilobytes per
>>>> second) memory usage?
>>>
>>> If your programm is a 32-bit application the GC most likely 
>>> leaks
>>> memory because it thinks its still referenced. Try compilling 
>>> your
>>> application for 64-bit. If the problem goes away it's not 
>>> your fault.
>>> A possible workaround for this situation is to allocate large 
>>> blocks
>>> of memory which you know will not contain any pointers with 
>>> GC.malloc
>>> manually and specifying the "don't scan" flag.
>>>
>>> If the problem still exists in a 64-bit application you most 
>>> likely
>>> continue to allocate memory that remains referenced. Make 
>>> sure you
>>> don't have any infinitly growing arrays or other containers 
>>> that still
>>> reference the memory you allocated.
>>
>> I've added GC.collect and GC.minimize() at the end of each 
>> frame, looks
>> like the growth has stopped, so its not a 32-bit problem yet.
>
> Well the GC doesn't kick in always. It only collects memory 
> when its neccessary (a certain limit is reached). For a game it 
> is usually a good idea to run the GC every frame to avoid the 
> ocasional long pause times that otherwise occur. Or you could 
> work around the GC entierly.
>
> Kind Regards
> Benjamin Thaut

Indeed, I tried to work around it and use manual memory 
management a year ago, but everything felt so ugly that I decided 
to throw that and go the idiomatic way.
I'm bit surprised that even with GC running every frame I haven't 
noticed a drop in performance, even when using more than 1 gb RAM.


More information about the Digitalmars-d-learn mailing list