Skip to content

Instantly share code, notes, and snippets.

@PyYoshi
Last active August 20, 2016 04:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PyYoshi/56cff45a7e2350b604b6032bd1d78f13 to your computer and use it in GitHub Desktop.
Save PyYoshi/56cff45a7e2350b604b6032bd1d78f13 to your computer and use it in GitHub Desktop.
$ go version
$ go test -bench . -benchmem
go version go1.7 linux/amd64

BenchmarkA1-4   	2000000000	         0.29 ns/op	       0 B/op	       0 allocs/op
BenchmarkA2-4   	2000000000	         0.27 ns/op	       0 B/op	       0 allocs/op
BenchmarkB1-4   	2000000000	         0.28 ns/op	       0 B/op	       0 allocs/op
BenchmarkB2-4   	2000000000	         0.27 ns/op	       0 B/op	       0 allocs/op
BenchmarkC1-4   	2000000000	         1.90 ns/op	       0 B/op	       0 allocs/op
BenchmarkC2-4   	2000000000	         0.30 ns/op	       0 B/op	       0 allocs/op
BenchmarkC3-4   	2000000000	         1.91 ns/op	       0 B/op	       0 allocs/op
BenchmarkD1-4   	2000000000	         1.90 ns/op	       0 B/op	       0 allocs/op
BenchmarkD2-4   	2000000000	         1.90 ns/op	       0 B/op	       0 allocs/op
BenchmarkE1-4   	100000000	        10.8 ns/op	       0 B/op	       0 allocs/op
BenchmarkE2-4   	500000000	         3.52 ns/op	       0 B/op	       0 allocs/op
BenchmarkF1-4   	20000000	        71.8 ns/op	       0 B/op	       0 allocs/op
BenchmarkF2-4   	10000000	       178 ns/op	     640 B/op	       1 allocs/op
BenchmarkG1-4   	2000000000	         0.27 ns/op	       0 B/op	       0 allocs/op
BenchmarkG2-4   	2000000000	         0.33 ns/op	       0 B/op	       0 allocs/op
package pointer
type i struct {
o []string
p []byte
}
func (i_ *i) Nothing() {
}
func (i_ i) Count1() {
_ = len(i_.o)
_ = len(i_.p)
}
func (i_ *i) Count2() {
j := (*i_)
_ = len(j.o)
_ = len(j.p)
}
type iBig struct {
a []string
b []byte
c []string
d []byte
e []string
f []byte
g []string
h []byte
i []string
j []byte
k []string
l []byte
m []string
n []byte
o []string
p []byte
q []string
r []byte
s []string
t []byte
u []string
v []byte
w []string
x []byte
y []string
z []byte
}
func (i_ *iBig) Nothing() {
}
func a1(x []string) {
_ = len(x)
}
func a2(x *[]string) {
_ = len(*x)
}
func b1(x []byte) {
_ = len(x)
}
func b2(x *[]byte) {
_ = len(*x)
}
func c1(x i) {
_ = len(x.o)
_ = len(x.p)
}
func c2(x *i) {
_ = len((*x).o)
_ = len((*x).p)
}
func c3(x *i) {
x_ := *x
_ = len(x_.o)
_ = len(x_.p)
}
func d1(x *i) {
x.Count1()
}
func d2(x *i) {
x.Count2()
}
func e1() i {
return i{
arrA,
arrB,
}
}
func e2() *i {
return &i{
arrA,
arrB,
}
}
func f1() iBig {
return iBig{
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
}
}
func f2() *iBig {
return &iBig{
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
}
}
func g1() []string {
return arrA
}
func g2() *[]string {
return &arrA
}
func h1(x iBig) {
x.Nothing()
}
func h2(x *iBig) {
x.Nothing()
}
var arrA = []string{
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "n", "m", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z", "0", "1", "2", "3",
"4", "5", "6", "7", "8",
"9", "0", "1", "2", "3",
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
}
var arrB = []byte(`
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
abcdefghijklnmopqrstuvwxyz01234567890123あいうえおかきくけこさしすせそたちつてとなにぬねの
`)
var structC = i{
arrA,
arrB,
}
var structCBig = iBig{
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
arrA,
arrB,
}
package pointer
import "testing"
func BenchmarkA1(b *testing.B) {
for i := 0; i < b.N; i++ {
a1(arrA)
}
}
func BenchmarkA2(b *testing.B) {
for i := 0; i < b.N; i++ {
a2(&arrA)
}
}
func BenchmarkB1(b *testing.B) {
for i := 0; i < b.N; i++ {
b1(arrB)
}
}
func BenchmarkB2(b *testing.B) {
for i := 0; i < b.N; i++ {
b2(&arrB)
}
}
func BenchmarkC1(b *testing.B) {
for i := 0; i < b.N; i++ {
c1(structC)
}
}
func BenchmarkC2(b *testing.B) {
for i := 0; i < b.N; i++ {
c2(&structC)
}
}
func BenchmarkC3(b *testing.B) {
for i := 0; i < b.N; i++ {
c3(&structC)
}
}
func BenchmarkD1(b *testing.B) {
for i := 0; i < b.N; i++ {
d1(&structC)
}
}
func BenchmarkD2(b *testing.B) {
for i := 0; i < b.N; i++ {
d2(&structC)
}
}
func BenchmarkE1(b *testing.B) {
for i := 0; i < b.N; i++ {
n := e1()
n.Nothing()
}
}
func BenchmarkE2(b *testing.B) {
for i := 0; i < b.N; i++ {
n := e2()
n.Nothing()
}
}
func BenchmarkF1(b *testing.B) {
for i := 0; i < b.N; i++ {
n := f1()
n.Nothing()
}
}
func BenchmarkF2(b *testing.B) {
for i := 0; i < b.N; i++ {
n := f2()
n.Nothing()
}
}
func BenchmarkG1(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = g1()
}
}
func BenchmarkG2(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = g2()
}
}
func BenchmarkH1(b *testing.B) {
for i := 0; i < b.N; i++ {
h1(structCBig)
}
}
func BenchmarkH2(b *testing.B) {
for i := 0; i < b.N; i++ {
h2(&structCBig)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment