Nil スライスでの容量拡張: 1 つの要素を追加すると容量が 2 つ増加します
Go でスライスを操作する場合、容量の概念が重要です。容量は、スライスに割り当てられた基礎となるストレージを表し、追加要素のためのスペースを提供します。既存のスライスに要素を追加する場合、新しい要素に対応するために容量が増加する可能性があります。
提供されたシナリオでは、長さと容量が 0 の nil スライス s1 に要素が追加され、その結果、次のようになります。長さ 1、容量 2 の新しいスライス s2。追加された要素が 1 つだけであるにもかかわらず、容量がこのように増加するのはなぜですか?
Go のスライス実装不必要な再割り当てを避けるために十分な容量を割り当てることでパフォーマンスを最適化します。 nil スライスに追加する場合、コンパイラーは、繰り返しの割り当てとコピーのオーバーヘッドを減らすために、小さな初期容量 (通常は 2) を割り当てます。
さらに、Go のスライスには、その容量によって定義される暗黙的なインデックスの上限があります。これは、s2 の長さが 1 であっても、インデックスの上限は 2 であり、そのインデックスで要素を読み書きできることを意味します。ただし、これらの値は実際のスライス データの一部とは見なされず、fmt.Printf() などの印刷関数を使用する場合には表示されない可能性があります。
実際には、スライスの長さではなくスライスの長さに注目することが重要です。その容量。容量は主にパフォーマンスの最適化に使用されるため、直接アクセスしたり依存したりしないでください。
以上がGo で Nil スライスに 1 つの要素を追加すると容量が 2 倍になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。