Hi all,

This is barely relevant to D, but I thought I'd try posting it here because I thought the audience might be interested. Let me know if I should post it somewhere else.

Long story short, I wrote my own C++ heap memory manager a while ago from scratch. First, here's a description:

Cons:
- Average-case performance is somewhat worse than heap managers provided by the OS or language runtimes - I'm not quite ready to open-source it yet (partly because I'm not sure if it's worth licensing commercially vs. open-sourcing, and partly because I'm not quite confident it's completely bug-free yet)

Pros:
- It was built from the ground-up to have dependable worst-case performance, and I think it's *pretty good* and robust under various allocation patterns - It keeps metadata entirely separate from data -- so when allocate a 4KB page of memory, it's not going to allocate an extra 4KB behind it just to put a "length" field there, which has given me problems before. (This can reduce the working set of the process considerably depending on your allocation granularity.) - It is alignment-agnostic -- so, it allocates _exactly_ as much as requested (no performance penalty for this whatsoever) - It's platform-independent (it's worked on Windows and also on Linux the few times I tried it) -- it's pretty easy to supply your own memory manager underneath, too.
- It has a very simple C (and C++) interface:

        typedef uintptr_t ManageMemory(
                void *context, uintptr_t address, size_t size,
                bool deallocate, bool commitment);
        extern ManageMemory manage_system_memory;
        void *memory_heap_construct(
                void *p, ManageMemory *manager, void *context);
        void memory_heap_destroy(void *p);
        void *memory_heap_allocate(
                void *heap, size_t size, void *hint);
        void memory_heap_deallocate(
                void *heap, void *address, size_t size);
        size_t memory_heap_size();

I was basically wondering if had any particular workloads they were interested in testing this on and giving me feedback on it. For now I'd give you a .DLL or a .so (though I haven't redistributed Linux binaries before, so I'd have to figure out how to do that) and the C/C++ header so you can use it and see how it is. Maybe you'd find it potentially useful for D too, but I guess that depends on how well it performs.

Let me know if you're interested.

Reply via email to