Junio C Hamano, Tue, Nov 22, 2005 21:41:56 +0100:
quoted
Reuse discarded nodes of llists
Signed-off-by: Alex Riesen <redacted>
I think making allocation/deallocation to the central place is a
good cleanup, but I am not sure about the free-nodes reusing.
Does this make difference in real life?
It definitely does, though nor very much. I have no real numbers at
hand (being home now), but I remember it was 1 min with against 3 min
without the patch on cygwin+fat32, which is already bad enough all by
itself. Very big repository with no redundant packs in it.
If so, it might be worth doing the slab-like allocation, since
free-nodes are very small structure and malloc overhead is not
ignorable there.
Like this?
if ( free_nodes ) { ... }
else {
struct llist_node *slab = malloc(sizeof(*slab) * BLKCNT);
for ( i =0; i < BLKCNT; ++i ) {
slab->next = free_nodes;
free_nodes = slab++;
}
}