| // Copyright 2026 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package runtime_test | |
| import ( | |
| "internal/abi" | |
| "runtime" | |
| "testing" | |
| ) | |
| const size_ = 0 | |
| func benchmarkStubTiny(b *testing.B) { | |
| const size = size_ | |
| type s struct { | |
| v [size]byte | |
| } | |
| b.Run("kind=new", func(b *testing.B) { | |
| for b.Loop() { | |
| runtime.Escape(new(s)) | |
| } | |
| }) | |
| typ := abi.TypeOf(s{}) | |
| b.Run("kind=mallocgc", func(b *testing.B) { | |
| for b.Loop() { | |
| runtime.Escape(runtime.MallocGC(size, typ, false)) | |
| } | |
| }) | |
| } | |
| const noscan_ = false | |
| func benchmarkStub(b *testing.B) { | |
| const size = size_ | |
| b.Run("kind=new", func(b *testing.B) { | |
| for b.Loop() { | |
| if noscan_ { | |
| runtime.Escape(new(struct{ v [size / 8]uint64 })) | |
| } | |
| if !noscan_ { | |
| runtime.Escape(new(struct{ v [size / 8]*uint64 })) | |
| } | |
| } | |
| }) | |
| var typ *abi.Type | |
| if noscan_ { | |
| typ = abi.TypeOf(struct{ v [size / 8]uint64 }{}) | |
| } | |
| if !noscan_ { | |
| typ = abi.TypeOf(struct{ v [size / 8]*uint64 }{}) | |
| } | |
| b.Run("kind=mallocgc", func(b *testing.B) { | |
| for b.Loop() { | |
| runtime.Escape(runtime.MallocGC(size, typ, true)) | |
| } | |
| }) | |
| } | |
| func benchmarkScanSliceStub(b *testing.B) { | |
| const size = size_ | |
| for b.Loop() { | |
| runtime.Escape(make([]*uint64, size/8)) | |
| } | |
| } |