그래서이 질문은 C#에서 참조 개체의 실제 주소를 가져 오는 것에 대해 몇 번 본적이 있습니다. 일반적인 합의는 이것이 가능하지 않은 것으로 보입니다 GCHandle.Alloc
을 GCHandleType.Pinned
으로 호출 할 수 없기 때문에 고정 된 개체의 주소를 가져올 수 있습니다.참조 개체의 주소가 직접 실행 창에서 작동하지만 컴파일 된 코드가 아님
내가 이상한 것을 알았지 만 Visual Studio 디버거에서 개체를 로컬 창에서 메모리 디버그 창으로 끌어서 참조 개체의 주소와 메모리를 볼 수 있습니다. 즉각적인 창 &obj
을 입력하고 객체의 실제 주소를 가져올 수도 있습니다 (이 주소는 메모리 창에 표시된 것과 정확하게 일치합니다).
그러나 왜 내 컴파일 된 코드에서 같은 전화 ... 예를 할 수없는 것이 있습니다 : 직접 \ 메모리 창 관리 유형, 심지어 디스플레이의 주소를 얻기 위해 허용되는 방법
object someObject = new Object();
&obj; // Compiler Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')
메모리의 레이아웃하지만 C#이 중 하나를 할 수 없어? C#에서 참조 객체의 실제 주소를 얻는 방법이 있습니까?
그러나 직접 실행 창에서 잘못된 C# 코드를 실행하는 것이 어떻게 가능합니까? –
직접 실행 창에는 C# 컴파일러가 내장되어 있지 않습니다. 단순히 표현식을 평가합니다. & 연산자에는 문제가 없습니다. –