2011-12-16 7 views
2

Go言語を使用するJavaのように文字列のコピーオンライトを使用しますか?私。文字列をメソッドに渡して決して変更しないと、これはメモリを割り当てて文字列をコピーします(時間が非効率的です)。それは単なるコピーを参照するだけです。Go言語を使用する文字列のコピーオンライト

+1

「Javaでのようにコピーオンライト...」は意味がありません。オブジェクトはJavaでは値ではありません。参照のみがあります。参照を渡すと、NEVERはどのような状況でも指し示すオブジェクトのコピーを作成します。参照の受け渡しまたは割り当ては、常に元の参照と同じオブジェクトを参照します。明示的に何らかの方法でコピーしない限り、オブジェクトはコピーされません(「オン・ライト」ではありません)。 – newacct

答えて

16

文字列が不変であるため、コピーオンライトではありません。しかし、文字列を共有しても、下にあるメモリ領域のコピーは作成されません。 Goでは、文字列は(長さ、データ)のペアとして表されます。文字列を渡すと、Goは長さとポインタをコピーしますが、指されたデータはコピーしません。

詳細については、this recent thread on golang-nutsを参照してください。

2

Goタイプstringは、実質的にjava.lang.Stringに相当します。 2つの実装(Go実行時、JVM)も同様ですが、同一ではありません。引数を関数とメソッドに渡すという点で、Go文字列のパフォーマンスはJava文字列と似ています。

関連する問題