由于.NET一直在托管内存中移动变量,因此需要"固定"变量,然后通过以下方式获取其位置GCHandle:
static void Main()
{
string myVar = "This is my string";
GCHandle handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
IntPtr pointer = GCHandle.ToIntPtr(handle);
Console.WriteLine(pointer);
handle.Free();
}
Run Code Online (Sandbox Code Playgroud)
但是,我相信这实际上会将原始变量移动到由其引用的新位置GCHandle,并且它不适用于所有类型 - 仅限于blittable类型.