9

.Net フレームワークでは String オブジェクトがヒープ メモリに直接格納されることは誰もが知っています。

文字列用の.Netフレームワークに予約済みメモリがあるかどうかを理解しようとしています。Java には、SCMP (String Constant Memory Pool) と呼ばれる文字列用に予約されたメモリがあり、ヒープ メモリ内の他のオブジェクトと同様に、文字列が初期化され、ガベージ コレクションが行われます。

4

3 に答える 3

6

.Net にはそのようなものはないと思います。

代わりに、これを読みましたが、文字列の使用方法が興味深いです。

CLR は、プログラム内のリテラル文字列を含むインターン プールと呼ばれるテーブルを維持します。これにより、コード内で同じ定数文字列を繰り返し使用しても、同じ文字列参照が使用されるようになります。System.String クラスは、文字列がインターン プールにあることを確認し、それへの参照を返す Intern メソッドを提供します。

このMSDNもチェックしてください:-

マネージ ヒープに同じ文字列が何千回も繰り返されるというシナリオを数多く見てきました。その結果、メモリの多くが文字列によって消費される大きなワーキング セットが作成されます。この状況では、多くの場合、文字列インターンを使用する方が適切です。

于 2013-09-16T15:32:43.680 に答える
2

.Net フレームワークは、テーブル内の文字列ストレージを節約しますIntern Pool。以下が表示される場合があります。

文字列インターンと String.Empty - Eric Lippert

1 つのコンパイル ユニットに 2 つの同一の文字列リテラルがある場合、生成されるコードは、アセンブリ内のそのリテラルのすべてのインスタンスに対して、CLR によって 1 つの文字列オブジェクトのみが作成されることを保証します。この最適化は「文字列インターニング」と呼ばれます。

文字列 Interning .Net フレームワーク

共通言語ランタイムは、プログラムでプログラムによって宣言または作成された一意の各リテラル文字列への単一の参照を含む、インターン プールと呼ばれるテーブルを維持することにより、文字列ストレージを節約します。したがって、特定の値を持つリテラル文字列のインスタンスは、システム内に 1 回だけ存在します。

于 2013-09-16T15:42:07.383 に答える
1

.NET では、各リテラル文字列のコピーが 1 つだけ存在するように、リテラル文字列は「インターン」されます。

http://msdn.microsoft.com/en-us/library/system.string.intern.aspxを参照してください。

于 2013-09-16T15:32:11.523 に答える