On Mon, 13 Apr 2009 01:45:00 -0400, bearophile <[email protected]> wrote:

dsimcha:
What if the key is a long?

At the moment an AA like this:
byte[long] aa;
allocates 16 or more bytes/pair, so it needs the same memory as:
long[long] aa;

A built-in set can of course use only about 8 bytes (plus few empty cells in the hash) for a:
HashSet!(long)

Bye,
bearophile

The AA node types are currently implemented as a binary tree for collision resolution, so each node also needs at least 2 pointers for the child nodes. Possibly a parent pointer, but I don't think so.

So T[long] aa will be 16 bytes + sizeof(T) for each node, assuming a pointer is 4 bytes.

But technically, there is always going to be cases where waste occurs, even without the void hack, depending on the resulting size of your nodes. Imagine a 33 byte node, which will use up 64 bytes of space per node. This is one of the reasons Tango and Dcollections have chunk allocators where a large chunk of nodes is allocated at once from the GC (or from malloc for non-GC types).

-Steve

Reply via email to