KDOC 316: Goのスライスは長さを保持している
この文書のステータス
- 作成
- 2024-11-29 貴島
- レビュー
- 2024-11-30 貴島
概要
Go言語のスライスでは、容量と実長を管理している。多めに容量を確保しておいて、満杯になったら新しいスライスの領域を確保してコピーする。これによって実際の配列は固定長で伸ばしたりはできないのだが、プログラマからは動的な配列のように扱える。
配列長(終端)を保持しているので、null終端などのマーカーは必要ない。
長さを保持するのでその分のメモリを使い、配列を載せ替える仕組みやオーバヘッドもあるが、昨今のメモリやCPU事情だと問題にならないことが多い。
https://github.com/kd-collective/go/blob/493edb29735fd2adf2087b32c60617dad11dc6e1/src/runtime/slice.go#L15-L19
type slice struct { array unsafe.Pointer len int cap int }
関連
- KDOC 310: なぜCの文字列はnull終端なのか?。ほかと比較して考えることにした