2009-08-28 11 views
0

스택에 할당 할 때 실제 참조의 크기를 알아 내려고 노력했습니다 (완전히 호기심이 없음).CLR에있는 참조의 크기는 무엇입니까

this을 읽은 후에도 (이것은 값 유형 또는 유형 정의에만 해당됩니다.) 나는 아직도 어디에서나 찾을 수없는 것 같습니다. 스택에 저장된다 A 형의 객체가 인스턴스화 이제

class A 
{ 
    string a; 
} 

, 문자열 객체에 대한 참조를 다음과 같이

그래서 기본적으로 클래스를 상상, 지금 무엇을 것에 할당의 크기 스택은?

면책 조항 : 32에서 32 비트 : 나는 완벽하고 완전한 넌센스를 이야기하고있는 경우 나 그냥 포인터의 크기와 같은 :

답변

4

을 알려 주시기 바랍니다, 아마도, 크기는 기본 INT의 일 것입니다 64 비트 플랫폼에서 64 비트를 지원합니다.

+0

와우, 문제를 overthinking의 고전적인 예 :) – Stephanvs

+1

꽤 올바른지는 모르지만 일부 가상 머신은 성능/캐시 이유로 인해 정수 크기보다 작은 압축 포인터를 사용합니다. 64 비트 핫스팟 JVM의 32 비트 CompressedOops – mikera

2

환경에 따라 IntPtr의 크기가 32 비트 또는 64 비트가됩니다.

2

유형 A의 객체가 인스턴스화 자 할 때, 문자열 객체에 대한 참조가 스택에 저장됩니다, 지금은 스택에 할당의 크기는 어떤 것입니까?

문자열 참조는 실제로 A가 참조 유형이기 때문에 스택이 아니라 힙에 저장됩니다.

+0

문자열에 대한 * 참조 *는 힙이 아닌 스택에 저장됩니다. 그러나 * 실제 개체 인스턴스 자체는 힙에 저장됩니다. – Stephanvs

+2

아니요, A의 모든 인스턴스 구성원은 문자열 참조를 포함하여 힙의 오브젝트 데이터에 저장됩니다. –