Hécate via ghc-devs <ghc-devs@haskell.org> writes:

> Hi everyone,
>
> I was asked at work today why I went for Vector instead plain old List 
> in order to store an API result that is quite small.
>
> While writing my reasons (pointer indirection, conversion to Aeson's 
> internal representation of a JSON array using Vector), I remember that I 
> heard that in some cases, GHC would be able to lay down in memory the 
> elements of a linked list next to each other. I don't think this gets 
> rid of the pointer-chasing, but I'm interested to know more about the 
> circumstances in which linked lists are optimised.
>
As Andreas suggests, you are likely thinking of the the fact that
copying GC tends to re-layout the heap such that topologically proximate
closures also tend to be nearby in memory. This result in a considerable
improvement in cache locality over traditionally non-moving allocators
although, as you point out, the pointer chasing cost and representation
size of a cons cell with small payload is still considerable compared to
a dense representation.

I don't think the wiki has any discussion of this but, e.g., Steve
Blackburn's Immix paper [1] does have some representative measurements
of the effect of non-moving (mark-sweep) and compacting (mark-compact
and Immix) allocation schemes on mutator performance.

Cheers,

- Ben


[1] https://www.steveblackburn.org/pubs/papers/immix-pldi-2008.pdf

Attachment: signature.asc
Description: PGP signature

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to