2016-12-23 4 views
2

Tour of Goは次のように述べています。「スライスは組み込みのmake関数で作成できます。これは動的サイズの配列を作成する方法です。make関数はゼロ配列を割り当て、その配列を参照するスライスを返します。アレイスライスの容量を増やすコストがどれくらいかを知りたい。Goでアレイスライスの容量を増やすことにはどのようなコストがかかりますか?

など。何は、これら2つの配列スライス間のメモリ使用量の違いのようになります。

a := make([]int, 0, 5) // len(a)=0, cap(a)=5 
b := make([]int, 0, 1000) // len(b)=0, cap(b)=1000 

は、配列がちょうどメモリにそのスライスの配列を作成し、xの容量をスライスするか、他の何かをするのか与えていますか?アレイスライスの容量サイズを実際のサイズに近づける方が良いか、将来のサイズ変更のコストを避けるために容量を増やすのが安いですか?

あなたの時間と知恵に感謝します。

+1

https://blog.golang.org/go-slices-usage-and-internals –

答えて

1

スライス容量は、バッキングアレイのサイズにすぎません。スライスに追加することを知っていて、将来の割り当てとコピーを避けたい場合は、容量を設定する必要があります。 appendを使用していない場合(または長さをスライスして手作業でサイズを変更するまれなケース)、追加の容量は意味がありません。

ほとんどの場合、配列への追加の相対コストはそれほどではないため、必要に応じてappendを割り当てることができます。

関連する問題