]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.24] runtime: prevent unnecessary zeroing of large objects with...
authorMichael Anthony Knyszek <mknyszek@google.com>
Fri, 21 Mar 2025 16:26:15 +0000 (16:26 +0000)
committerCarlos Amedee <carlos@golang.org>
Thu, 10 Jul 2025 17:03:34 +0000 (10:03 -0700)
commit390ffce7d60abf7d5317c0a78beef64affd0059a
tree19b721971a3d29673944aea10e80b7fd94756cb1
parentb454859a8a1c8ae10635825beda4cf516d949e48
[release-branch.go1.24] runtime: prevent unnecessary zeroing of large objects with pointers

CL 614257 refactored mallocgc but lost an optimization: if a span for a
large object is already backed by memory fresh from the OS (and thus
zeroed), we don't need to zero it. CL 614257 unconditionally zeroed
spans for large objects that contain pointers.

This change restores the optimization from before CL 614257, which seems
to matter in some real-world programs.

While we're here, let's also fix a hole with the garbage collector being
able to observe uninitialized memory of the large object is observed
by the conservative scanner before being published. The gory details are
in a comment in heapSetTypeLarge. In short, this change makes
span.largeType an atomic variable, such that the GC can only observe
initialized memory if span.largeType != nil.

For #72991.
Fixes #73800.

Change-Id: I2048aeb220ab363d252ffda7d980b8788e9674dc
Reviewed-on: https://go-review.googlesource.com/c/go/+/659956
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Felix Geisendörfer <felix.geisendoerfer@datadoghq.com>
(cherry picked from commit df9888ea4e97feb755e452609be5078686370995)
Reviewed-on: https://go-review.googlesource.com/c/go/+/682356
src/runtime/malloc.go
src/runtime/mbitmap.go