В C#
как вы можете получить адрес переменной без использования ключевого слова unsafe
. Я не хочу менять адрес или доступ к нему, просто укажите его местоположение.Получение адреса местоположения переменной
2
A
ответ
4
Вам нужно будет связать объект перед извлечением его адреса. В противном случае GC может свободно перемещать его.
object variable = new object();
GCHandle handle = GCHandle.Alloc(variable, GCHandleType.Pinned);
IntPtr address = handle.AddrOfPinnedObject();
Обычно вы делаете это только в сценариях, требующих некоторого типа неуправляемого взаимодействия. Однако даже тогда редко возникает необходимость в ручном манипуляции такого типа.
17
Вы не можете.
И не зря, потому что адрес не фиксирован. Он может - и будет - перемещаться с помощью управления памятью CLR.
7
Поскольку .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();
}
Однако, я считаю, это на самом деле движется в исходная переменная к новым местоположению, на которое ссылается GCHandle
, и он не работает для всех типов - только blittable.
Я не думаю, что это возможно без использования методов 'unsafe' – jAC
Я не считаю, что это возможно без использования ключевого слова' unsafe', так как вам нужно явно получить указатель на переменную, чтобы получить свой адрес. http://msdn.microsoft.com/en-us/library/zcbcf4ta(v=vs.110).aspx –
Просто интересно .... почему? –