4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

golangパフォーマンス2: slice vs array

Last updated at Posted at 2016-10-30

テスト環境: go version go1.7.3 windows/amd64

ファイル構造:
rootファイル/02arraySlice.go
rootファイル/02arraySlice_test.go (効率テスト用)

02arraySlice.go

package go1_6

const capacity = 1024

//配列操作arrayはsliceにより早い
func array() [capacity]int {//配列処理テスト関数
	var d [capacity]int

	for i := 0; i < len(d); i++ {
		d[i] = 1
	}

	return d
}

func slice() []int {//slice処理テスト関数
	d := make([]int, capacity)

	for i := 0; i < len(d); i++ {
		d[i] = 1
	}

	return d
}

//パラメータとして渡す場合はsliceほうが早い (arrayはメモリ中にコピーされる)
func inArray(array [capacity]int) {//配列として関数パラメータ効率テスト

}

func inArray2(array *[capacity]int) {//配列ポインタとして関数パラメータ効率テスト

}

func inSlice(slice []int) {//sliceとして関数パラメータ効率テスト

}

//reArrayにより早い
func reSlice() []byte {//return slice場合効率テスト
	return []byte{1, 2, 3, 4}
}

func reArray() [4]byte {//return array場合効率テスト
	return [4]byte{1, 2, 3, 4}
}

02arraySlice_test.go

package go1_6

import (
	"testing"
)

func BenchmarkArray(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = array()
	}
}

func BenchmarkSlice(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = slice()
	}

}

func BenchmarkInArray(b *testing.B) {
	arr := array()
	for i := 0; i < b.N; i++ {
		inArray(arr)
	}
}

func BenchmarkInArray2(b *testing.B) {
	b.StopTimer()
	arr := array()
	b.StartTimer()

	parr := &arr
	for i := 0; i < b.N; i++ {
		inArray2(parr)
	}
}

func BenchmarkInSlice(b *testing.B) {
	b.StopTimer()
	sli := slice()
	b.StartTimer()

	for i := 0; i < b.N; i++ {
		inSlice(sli)
	}

}

func BenchmarkReArray(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = reArray()
	}
}

func BenchmarkReSlice(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = reSlice()
	}
}

テスト結果:
image

ポイント:
通常処理場合は配列がSliceにより早いですが、
配列は関数パラメータと関数戻し値として利用された場合は
メモリ中にコピーされるため逆に効率が落ちます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?