Memory leaks

Benjamin Thaut code at benjamin-thaut.de
Sun Oct 13 07:31:11 PDT 2013


Am 13.10.2013 16:23, schrieb develop32:
> 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.

Did you profile how much time the GC takes every frame?
For me that was 8-9 ms every frame. That was not acceptable for my case.

-- 
Kind Regards
Benjamin Thaut


More information about the Digitalmars-d-learn mailing list