2012-01-21 4 views
11

CLR 클래스의 메모리 레이아웃은 무엇입니까?CLR 클래스 메모리 레이아웃

C++ 백그라운드에서 오는 가상 함수가있는 C++ 클래스의 메모리 레이아웃은 v 테이블 포인터로 시작하고 클래스의 데이터 멤버가 메모리에서옵니다.

가상 함수가있는 CLR 클래스에 v 테이블 포인터가 있습니까? 이 포인터는 클래스 메모리 레이아웃의 첫 번째 필드입니까? 프로그래머가 정의한 데이터 멤버 외에도 CLR 클래스 메모리 레이아웃에 추가 필드가 있습니까? 이러한 추가 필드는 무엇을 나타 냅니까?

+0

C# 클래스의 메모리 레이아웃은 일반적으로 JITTER에 의해 결정되므로 런타임에 표시됩니다 (예외가 있지만). – Yahia

+3

C#은 메모리 레이아웃에 대해 아무 것도 말하지 않습니다. 이것은 CLR 클래스에 관한 것입니다. –

+0

VTable을 좀 더 실용적인 방식으로보고 싶다면 다음과 같은 게시물을 따라 WinDbg,'https://blogs.msdn.microsoft.com/kristoffer/2007/'에서'! DumpMT -MD address' 명령을 실행할 수 있습니다. 01/02/set-a-breakpoint-in-managed-code-using-windbg/ –

답변

9

구현에 따라 달라 지지만 this article은 Microsoft .NET 구현에있는 CLR v2에 대한 설명을 제공합니다. I 용의자 CLR v4와 동일하지만 보장 할 수 없습니다. 자세한 내용은 "ObjectInstance"라는 섹션을 찾으십시오. 그러나 전체 아티클을 흥미롭게 볼 수 있습니다. 로크에 사용되는 동기 블록, 기본적합니다 (VTABLE 포함)에 정보를 입력하기위한 포인터이다 형 기준 :

이 문서에 따르면, 기본적으로 헤더의 두 비트들이있다.

+0

감사합니다! 네가 지적한 기사가 내가 찾던 것 같다. –

+0

이 링크는 깨졌습니다. : –

+0

@MrAnderson : 쥐 - 불행히도 그걸 발견하는 방법을 모르겠다. ... –

1

원본 "Jit and Run"문서는 still around, as a chm file입니다. 그냥 MSDN instructions이 읽을 수에 따라 : 대부분의 Windows 버전에

은 먼저 로컬 컴퓨터에이 파일을 저장하고 읽기 위해 파일 차단을 해제해야합니다. 파일의 차단을 해제하려면 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 '차단 해제'버튼을 선택하십시오. 그러나

을 읽을 수있는 내용은 다음 사용할 수 있습니다, 오래된 존 소총 잘못 추측 - 그리고 객체의 메모리 레이아웃은 참으로 변경되었습니다. Sasha Goldstein은 레이아웃에 대한 최신 설문 조사 (CLR v4) here을 제공합니다.