在C#中,有没有办法
- 获取存储在a中的内存地址
引用类型变量?
- 获取a的内存地址
多变的?
EDIT:
int i;
int* pi = &i;
对于#2,&
运算符的工作方式与 C 中相同。如果变量不在堆栈上,您可能需要使用fixed
不过,在您工作时将其固定下来,这样垃圾收集器就不会移动它。
对于#1,引用类型比较棘手:您需要使用GCHandle
,并且引用类型必须是 blittable,即具有定义的内存布局并且可以按位复制。
为了以数字形式访问地址,您可以从指针类型转换为IntPtr
(定义为与指针大小相同的整数类型),然后从那里到uint
or ulong
(取决于底层机器的指针大小)。
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
class Blittable
{
int x;
}
class Program
{
public static unsafe void Main()
{
int i;
object o = new Blittable();
int* ptr = &i;
IntPtr addr = (IntPtr)ptr;
Console.WriteLine(addr.ToString("x"));
GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);
addr = h.AddrOfPinnedObject();
Console.WriteLine(addr.ToString("x"));
h.Free();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)