]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: shorten reflect.unsafe_New call chain
authorMartin Möhrmann <moehrmann@google.com>
Sun, 28 Jan 2018 18:46:57 +0000 (19:46 +0100)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 21 Feb 2018 00:31:21 +0000 (00:31 +0000)
reflect.unsafe_New is an often called function according
to profiling in a large production environment.

Since newobject is not inlined currently there
is call overhead that can be avoided by calling
mallocgc directly.

name  old time/op  new time/op  delta
New   32.4ns ± 2%  29.8ns ± 1%  -8.03%  (p=0.000 n=19+20)

Change-Id: I572e4be830ed8e5c0da555dc3a8864c8363112be
Reviewed-on: https://go-review.googlesource.com/95015
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/malloc.go

index 299add4b35545c1594fa958ed9808c4980cb74c0..ecbae721dd78aef9c63ebecf5c7c544fd956a166 100644 (file)
@@ -918,7 +918,7 @@ func newobject(typ *_type) unsafe.Pointer {
 
 //go:linkname reflect_unsafe_New reflect.unsafe_New
 func reflect_unsafe_New(typ *_type) unsafe.Pointer {
-       return newobject(typ)
+       return mallocgc(typ.size, typ, true)
 }
 
 // newarray allocates an array of n elements of type typ.