From: Josh Bleecher Snyder Date: Mon, 17 Jul 2017 03:46:52 +0000 (-1000) Subject: runtime: special case allocation of arrays of size 1 X-Git-Tag: go1.10beta1~1586 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=29e9b89b9ada73fa7775b351c100709c330c0a46;p=gostls13.git runtime: special case allocation of arrays of size 1 This avoids division and multiplication. Instrumentation suggests that this is a very common case. Change-Id: I2d5d5012d4f4df4c4af1f9f85ca9c323c9889c0e Reviewed-on: https://go-review.googlesource.com/54657 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall --- diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 0ebd2c0ab2..274ab537fc 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -847,6 +847,9 @@ func reflect_unsafe_New(typ *_type) unsafe.Pointer { // newarray allocates an array of n elements of type typ. func newarray(typ *_type, n int) unsafe.Pointer { + if n == 1 { + return mallocgc(typ.size, typ, true) + } if n < 0 || uintptr(n) > maxSliceCap(typ.size) { panic(plainError("runtime: allocation size out of range")) }