0

textVisual Studio のメモリウィンドウを使用して文字列変数を調べると、その値が表示されます。

Visual Studio のメモリ ウィンドウでの <code>string</code> 変数の検査の例

好奇心から、その値が参照される場所を(メモリウィンドウでも)検査する方法はありますか?

(もちろん、メモリ位置のアドレスは既に確認できます。CLR がクラス型インスタンスをどのように表し、どのように機能するのか知りたいので、これを質問しています。CLI 仕様の状態に基づいて、CLR がそれらを表していると想定しています。少なくとも、ポインター、型トークン、および値の組み合わせとして.私は上記の後者の2つを見ていますが、ポインターと、それと一緒に保存される可能性のあるものを見たい.)

4

1 に答える 1

3

一般に、特にこれはインターンされた文字列であるため、場所は 1 つだけではありません。しかし、テキスト変数が文字列を指していることがわかっているので、1 つ持っています。そのため、address-of 演算子を使用して参照のアドレスを取得し&text、[アドレス] ボックスに入力します。

もう少し認識しやすいようにするには、[メモリ] ウィンドウを右クリックし、[8 バイト整数] を選択します。000000000256D08 が表示されます。あなたが見ているメモリの領域は、メインスレッドのスタックです。

これはすべて少し学術的であることに注意してください。これは、デバッガーを使用していて、ジッター オプティマイザーが無効になっているために機能します。最適化されたプログラムでは、そのポインター値は cpu レジスターに格納されます。また、テスト メソッドの特定のケースでは、代入ステートメントが最適化されて除去されるため、何も確認する必要はありません。

リリース ビルドと [ツール] + [オプション]、[デバッグ]、[全般] で「実際の」コードを確認し、[JIT 最適化を抑制する] オプションのチェックを外します。デバッガーが愚かになることに注意してください。デバッガーはローカル変数についてあまり知りません。最も重要なデバッグ ウィンドウは、コードを表示する [デバッグ + ウィンドウ + 逆アセンブリ] と、CPU レジスタを表示する [デバッグ + ウィンドウ + レジスタ] です。後者のウィンドウを右クリックし、SSE2 にチェックマークを付けると、XMM レジスターが表示されます。x64 ジッターはそれらを使用するのが好きです。

于 2013-06-14T08:37:14.643 に答える