2014-03-18 3 views
1

내가 여기 올바른 용어를 사용하고 있다면 난 잘 모르겠지만, 나는 다음과 같은 코드가있는 경우 : (C#으로)
레퍼런스에는 얼마나 많은 공간이 필요합니까?

Object object1; 
Object object2; 
object1 = new Object(); 

object2 = object1; 

는 오브젝트 1만큼 공간을 차지 object2, 또는 것인가 그냥 object1에서 생성 된 인스턴스를 가리 키시겠습니까?

올바른 용어를 사용하여 제대로 표현하지 못하는 경우 꼭 알려주십시오.

+0

의한 오브젝트를 차지한다'object2' * *이 동일한 목적으로한다. [참조 형식] (http://msdn.microsoft.com/en-us/library/490f96s2.aspx) 할당은 복사/복제/복제를 만들지 * 않습니다 *. – user2864740

답변

0

object2object1과 같이 힙에있는 동일한 부하 개체를 가리 킵니다. 이제 이것이 값 유형이고 메소드 범위 인 경우 스택에 추가되어 더 많은 메모리를 차지합니다.

C 또는 C++ 포인터의 개념을 이해하면 관련이 있습니다.

+0

오브젝트가 값 유형 인 경우 박스형이되어 그 것보다 조금 더 복잡합니다 ... – Servy

1

동일한 인스턴스를 가리키며 두 개의 변수가 힙의 같은 개체를 참조하게됩니다.

5

참조는 정확히 한 단어의 메모리를 사용합니다. 이는 32 비트 애플리케이션에서 32 비트, 64 비트 애플리케이션에서 64 비트 등입니다.

두 변수는 참조 유형이므로 정확히 한 단어의 메모리를 차지합니다. 하나의 실제 객체 인스턴스에는 많은 양의 메모리가 필요하지만 어느 정도의 메모리가 있습니다. 프로그램의 변수 둘 다 해당 객체에 대한 참조를 포함하지만, 그렇지 않은 경우에도 동일한 공간을 차지합니다. null 참조는 결국 유효한 참조와 동일한 공간을 차지합니다.

+0

64 비트 어플리케이션에서 더 많은 비트를 차지하는 이유는 무엇입니까? 무의미한 소리로 미안하지만, 난 그냥 궁금 해서요 – user1974555

+1

@ user1974555 64 비트 응용 프로그램의 * 정의 *는 모든 참조가 64 비트입니다. 모든 참조 크기가 64 비트이기 때문에 64 비트 응용 프로그램이므로 참조 크기는 64 비트 응용 프로그램이므로 64 비트가 아닙니다. – Servy

+0

더 많은 공간을 차지하는 용도는 무엇입니까? 더 많은 참조 또는 무엇을 가질 수 있을까요? – user1974555

관련 문제