1 class Test 2 { 3 int a; 4 string b; 5 public Test(int a,string b) 6 { 7 this.a=a; 8 this.b=b; 9 } 10 }
通过unsafe或GCHandle可以查到字符串,整数,数组等的内存地址
Test t1=new Test();
这里如果如何获取t1的内存地址??
求解
答案可能让你失望,c#是不能获取内存地址的,就算获取到了也没什么意义,因为一个对象在内存的地址会变化的。
当你在unsafe的情况下,可以把内存pin在一定的地址防止回收,只有这样获取的地址才有意义。
GCHandle可以转化成IntPtr指针。
本来这些获取到也没有什么意思的
一楼可能正解……
虽然可以获取,但是不建议这样做。而且就算你获取到了,你也做不了太多的事。
C#的指针用途非常有限,值类型可以用指针来操作,但引用类型就不行了。
以下是代码:
using System.Runtime.InteropServices; using System; namespace ConsolePrototype { public class A { } class Program { static void Main(string[] args) { A a = new A(); GCHandle hander = GCHandle.Alloc(a); var pin = GCHandle.ToIntPtr(hander); Console.WriteLine(pin); } } }