如何在C#中显示引用的实际值

tky*_*yle 1 c#

我正在学习更多关于C#的知识,并且想知道如何显示引用的实际值或结构的地址.我正在寻找类似于以下C代码的东西:

    int i; 
    printf("int i resides at memory location %x",&i);
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 8

unsafe上下文中,这将在C#中起作用:

int i = 10;
int *ptr = &i;
Console.WriteLine((int)ptr);
Run Code Online (Sandbox Code Playgroud)

我不知道它是否可以在安全的环境中完成,或者,如果是,如何(我怀疑它不能).

  • 发布的代码将显示堆栈的内容,而不是GC堆.创建指向引用类型的指针需要先将其固定.那是Heisbergian,你现在不再正在看堆的正常布局了.使用sos.dll调试器扩展名!dumpheap命令. (4认同)
  • C#规范的第18.3节对此进行了彻底的解释.查看"固定"的声明.http://msdn.microsoft.com/en-us/library/f58wzh21.aspx.它归结为指针是否正在查看GC认为可移动的内容. (2认同)

Gra*_*rdx 6

我无法在C#中完成此操作..NET可以随心所欲地移动存储块,因此变量的地址最多只能保留临时含义.