Вы можете использовать GCHandle
, чтобы получить адрес закрепленного объекта. ГХ может перемещать объекты, поэтому единственный разумный адрес, который нужно получить, - это один из закрепленных объектов.
GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);
Console.WriteLine(handle.AddrOfPinnedObject().ToInt32());
handle.Free();
Помните, однако, что GCHandle
будет закреплять только объекты примитивного или blittable типов. Некоторые объекты являются blittable (и вы можете настроить его для демонстрационных целей, чтобы он работал), но любой ссылочный тип не будет blittable.
Вам нужно будет добавить явное описание с помощью [StructLayout(LayoutKind.Sequential)]
или использовать отладчик для непосредственной проверки адресов объекта, которые не соответствуют этим критериям.