[OT] I wrote a (better?) heap memory manager, is it good for anything?

Anonymouse via Digitalmars-d digitalmars-d at puremagic.com
Sat Aug 9 06:29:46 PDT 2014


On Saturday, 9 August 2014 at 08:48:37 UTC, Mehrdad wrote:
> 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.

There is no realloc, move, cpy ?



More information about the Digitalmars-d mailing list