因此,我已经多次看到了有关在C#中获取引用对象的物理地址的问题,并且普遍认为这是不可能的因为你不能通过GCHandleType.Pinned
调用GCHandle.Alloc
这将允许你获取固定对象的地址。引用对象的地址在即时窗口中工作,但不在编译代码中
我发现奇怪的是,在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')
立即\ Memory窗口是如何允许获得托管类型,甚至显示的地址内存的布局,但C#不能做到这一点?有没有什么办法可以得到C#中引用对象的实际地址?
但即时窗口如何执行无效的C#代码? –
立即窗口中没有嵌入C#编译器。它只是评估表达式。它对&运算符没有任何问题。 –