Jeremie Pelletier wrote:
Tom S Wrote:
Jeremie Pelletier wrote:
Tom S Wrote:
Jeremie Pelletier wrote:
I myself allocate all my meshes and textures directly on the GC and I'm pretty
sure its faster than C's malloc and much safer.
Hm, why would it be faster with the GC than malloc? I'm pretty sure it's
the opposite :P Plus, I could use a specialized malloc implementation,
like TLSF.
The D GC is already specialized, and given its being used quite a lot in D,
there are good chances its already sitting in the CPU cache, its heap already
having the available memory block waiting on a freelist, or if the alloc is
more than 0x1000 bytes, the pages available in a pool. You'd need to use malloc
quite a lot to get the same optimal performance, and mixing the two would
affect the performance of both.
It might be specialized for _something_, but it definitely isn't
real-time systems. I'd say with my use cases there's a very poor chance
the GC is sitting in the CPU cache since most of the time my memory is
preallocated and managed by specialized structures and/or malloc. I've
found that using the GC only for the hard-to-manually-manage objects
works best. The rest is handled by malloc and the GC has a very shallow
vision of the world thus its collection runs are very fast. Of course
there's a drawback that both the GC and malloc will have some pages
cached, wasting memory, but I don't let the GC touch too much so it
should be minimal. YMMV of course - all depends on the memory allocation
patterns of the application.
I understand your points for using a separate memory manager, and I agree with
you that having less active allocations make for faster sweeps, no matter how
little of them are scanned for pointers. However I just had an idea on how to
implement generational collection on a non-moving GC which should solve your
issues (and well, mines too) with the collector not being fast enough. I need
to do some hacking on my custom GC first, but I believe it could give yet
another performance boost. I'll add my memory manager to my list of code
modules to make public :)
Jeremie
If the code is really usefull, why not offer it to the Tango team, for
formal inclusion in the next release ?
Nick B