ホームページ > バックエンド開発 > Golang > Go スライスをスライスすると容量が減るのはなぜですか?

Go スライスをスライスすると容量が減るのはなぜですか?

Patricia Arquette
リリース: 2024-12-07 00:10:14
オリジナル
381 人が閲覧しました

Why Does Slicing a Go Slice Reduce Its Capacity?

スライスのスライス: 容量の変化を理解する

Go でスライスを操作する場合、容量の概念を理解することが重要です。容量とは、基礎となる配列を再割り当てせずにスライスが保持できる要素の最大数を指します。スライスは基になるデータをコピーしませんが、容量に影響を与える可能性があります。

s = s[2:] によって容量が減少するのはなぜですか?

スライスの場合は、元の基になる配列の一部を指す新しいスライス ヘッダーを作成します。新しいスライスの容量は、参照する配列のセグメントによって決まります。

指定されたコードでは、s = s[:4] により、配列の最初の 4 つの要素を参照するスライスが作成されます。スライスは依然として同じ基になる配列を指しているため、容量は 6 のままです。

ただし、 s = s[:0] では、長さ 0 のスライスの容量は 6 になります。これは、スライスが同じであるためです。は配列の先頭を指しているため、拡張のための十分なスペースがあります。

s = s[2:] を実行すると、スライスの最初の 2 つの要素が削除されます。これにより、新しいスライスへのポインタが変更され、基になる配列のさらに下を指すようになります。その結果、スライス後の配列には使用可能な要素が 4 つだけ残っているため、容量は 4 に減ります。

カットオフ要素の回復

要素が削除されたら、スライスから削除した場合、基になる配列を変更しているため、同じ変数を使用して復元することはできません。これらの要素を保持する必要がある場合は、元のスライスを参照する新しいスライスを作成できます。

スライスのメモリ表現

スライスの容量をよりよく理解するには、その方法を視覚化します。スライスはメモリ内で表されます:

  • make([]byte, 5) は基礎となるバイトを持つスライスを作成しますサイズ 5 の配列。
  • 配列にはアドレスとサイズがあり、スライス ヘッダーに保存されます。
  • この配列を s = s[2:4] にスライスすると、新しいスライス ヘッダーが作成されます。基礎となる配列の 3 番目と 4 番目の要素を指すものが作成されます。
  • このスライスの容量は、スライスの後の配列内で使用可能な要素の数によって決まります。この場合、それは 3 であり、残りの 2 つの使用できない要素が残ります。

以上がGo スライスをスライスすると容量が減るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート