KDOC 316: Goのスライスは長さを保持している

この文書のステータス

  • 作成
    • 2024-11-29 貴島
  • レビュー
    • 2024-11-30 貴島

概要

Go言語のスライスでは、容量と実長を管理している。多めに容量を確保しておいて、満杯になったら新しいスライスの領域を確保してコピーする。これによって実際の配列は固定長で伸ばしたりはできないのだが、プログラマからは動的な配列のように扱える。

配列長(終端)を保持しているので、null終端などのマーカーは必要ない。

長さを保持するのでその分のメモリを使い、配列を載せ替える仕組みやオーバヘッドもあるが、昨今のメモリやCPU事情だと問題にならないことが多い。

type slice struct {
	array unsafe.Pointer
	len   int
	cap   int
}

関連