From 29e9b89b9ada73fa7775b351c100709c330c0a46 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Sun, 16 Jul 2017 17:46:52 -1000 Subject: [PATCH] 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 --- src/runtime/malloc.go | 3 +++ 1 file changed, 3 insertions(+) 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")) } -- 2.50.0