Skip to content
  • Hannes Siebenhandl's avatar
    88cb3e10
    Avoid UArray when indexing is not required · 88cb3e10
    Hannes Siebenhandl authored and Marge Bot's avatar Marge Bot committed
    `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO`
    references two `UArray`'s but never indexes them. They are only needed
    to encode the elements into a `ByteArray#`. The three words for
    the lower bound, upper bound and number of elements are essentially
    unused, thus we replace `UArray` with a wrapper around `ByteArray#`.
    This saves us up to three words for each `UnlinkedBCO`.
    
    Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat
    the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances.
    
    For example, agda's repl session has around 360_000 UnlinkedBCO's,
    so avoiding these three words is already saving us around 8MB residency.
    88cb3e10
    Avoid UArray when indexing is not required
    Hannes Siebenhandl authored and Marge Bot's avatar Marge Bot committed
    `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO`
    references two `UArray`'s but never indexes them. They are only needed
    to encode the elements into a `ByteArray#`. The three words for
    the lower bound, upper bound and number of elements are essentially
    unused, thus we replace `UArray` with a wrapper around `ByteArray#`.
    This saves us up to three words for each `UnlinkedBCO`.
    
    Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat
    the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances.
    
    For example, agda's repl session has around 360_000 UnlinkedBCO's,
    so avoiding these three words is already saving us around 8MB residency.
Loading