mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.typeparams] runtime: simplify defer record allocation
Now that deferred functions are always argumentless and defer records are no longer with arguments, defer record can be fixed size (just the _defer struct). This allows us to simplify the allocation of defer records, specifically, remove the defer classes and the pools of different sized defers. Change-Id: Icc4b16afc23b38262ca9dd1f7369ad40874cf701 Reviewed-on: https://go-review.googlesource.com/c/go/+/326062 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
4468e1cfb9
commit
e0e9fb8aff
6 changed files with 50 additions and 142 deletions
|
|
@ -420,8 +420,6 @@ func mallocinit() {
|
|||
throw("bad TinySizeClass")
|
||||
}
|
||||
|
||||
testdefersizes()
|
||||
|
||||
if heapArenaBitmapBytes&(heapArenaBitmapBytes-1) != 0 {
|
||||
// heapBits expects modular arithmetic on bitmap
|
||||
// addresses to work.
|
||||
|
|
@ -1088,15 +1086,6 @@ func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
|
|||
|
||||
var scanSize uintptr
|
||||
if !noscan {
|
||||
// If allocating a defer+arg block, now that we've picked a malloc size
|
||||
// large enough to hold everything, cut the "asked for" size down to
|
||||
// just the defer header, so that the GC bitmap will record the arg block
|
||||
// as containing nothing at all (as if it were unused space at the end of
|
||||
// a malloc block caused by size rounding).
|
||||
// The defer arg areas are scanned as part of scanstack.
|
||||
if typ == deferType {
|
||||
dataSize = unsafe.Sizeof(_defer{})
|
||||
}
|
||||
heapBitsSetType(uintptr(x), size, dataSize, typ)
|
||||
if dataSize > typ.size {
|
||||
// Array allocation. If there are any
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue