したがって、C#で参照オブジェクトの物理アドレスを取得することについてこの質問を数回見ましたが、一般的なコンセンサスは、のアドレスを取得できるように呼び出すことができないため、これは不可能であると思われGCHandle.Alloc
ますGCHandleType.Pinned
固定されたオブジェクト。
私が奇妙だと思うのは、Visual Studio デバッガーでオブジェクトをローカル ウィンドウからメモリ デバッグ ウィンドウにドラッグし、参照オブジェクトのアドレスとメモリを確認できることです。イミディエイト ウィンドウに入力して&obj
、オブジェクトの実際のアドレスを取得することもできます (このアドレスは、[メモリ] ウィンドウに表示されているアドレスに正しく対応しています)。
しかし、コンパイルされたコードで同じ呼び出しを行うことができないのはなぜですか...つまり:
object someObject = new Object();
&obj; // Compiler Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')
Immediate\Memory Window はマネージ型のアドレスを取得し、メモリのレイアウトを表示することもできますが、C# ではこれを行うことはできません。C#で参照オブジェクトのこの実際のアドレスを取得する方法はありますか?