• Rick Hudson's avatar
    [dev.garbage] runtime: restructure alloc and mark bits · 2063d5d9
    Rick Hudson authored
    Two changes are included here that are dependent on the other.
    The first is that allocBits and gcamrkBits are changed to
    a *uint8 which points to the first byte of that span's
    mark and alloc bits. Several places were altered to
    perform pointer arithmetic to locate the byte corresponding
    to an object in the span. The actual bit corresponding
    to an object is indexed in the byte by using the lower three
    bits of the objects index.
    
    The second change avoids the redundant calculation of an
    object's index. The index is returned from heapBitsForObject
    and then used by the functions indexing allocBits
    and gcmarkBits.
    
    Finally we no longer allocate the gc bits in the span
    structures. Instead we use an arena based allocation scheme
    that allows for a more compact bit map as well as recycling
    and bulk clearing of the mark bits.
    
    Change-Id: If4d04b2021c092ec39a4caef5937a8182c64dfef
    Reviewed-on: https://go-review.googlesource.com/20705Reviewed-by: default avatarAustin Clements <austin@google.com>
    2063d5d9
cgocall.go 18.7 KB