]> Cypherpunks repositories - gostls13.git/commit
runtime: redo heap bitmap
authorKeith Randall <khr@golang.org>
Fri, 29 Apr 2022 20:21:44 +0000 (13:21 -0700)
committerKeith Randall <khr@golang.org>
Tue, 16 Aug 2022 20:39:36 +0000 (20:39 +0000)
commit6a9c674a09b057a641527ac847cbdf1a3824b753
tree48c4355903e0931f090fd38900ff3f3e21aed265
parenta55793835f16d0242be18aff4ec0bd13494175bd
runtime: redo heap bitmap

[this is a retry of CL 407035 + its revert CL 422395. The content is unchanged]

Use just 1 bit per word to record the ptr/nonptr bitmap.
Use word-sized operations to manipulate the bitmap, so we can operate
on up to 64 ptr/nonptr bits at a time.

Use a separate bitmap, one bit per word of the ptr/nonptr bitmap,
to encode a no-more-pointers signal. Since we can check 64 ptr/nonptr
bits at once, knowing the exact last pointer location is not necessary.

As a followon CL, we should make the gcdata bitmap an array of
uintptr instead of an array of byte, so we can load 64 bits of it at once.
Similarly for the processing of gc programs.

Change-Id: Ica5eb622f5b87e647be64f471d67b02732ef8be6
Reviewed-on: https://go-review.googlesource.com/c/go/+/422634
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
12 files changed:
src/cmd/compile/internal/test/inl_test.go
src/reflect/all_test.go
src/runtime/cgocall.go
src/runtime/cgocheck.go
src/runtime/heapdump.go
src/runtime/malloc.go
src/runtime/mbitmap.go
src/runtime/mcache.go
src/runtime/mcentral.go
src/runtime/mgcmark.go
src/runtime/mheap.go
src/runtime/slice.go