2011-01-18 2 views
6

나는이 질문이 수천 번씩 제기되었다고 상상할 수있다. 그러나 나는 대답을 찾는 데별로 행운이 없었고, 이것은 필요 이상으로 호기심에서 벗어났다.힙에도 객체의 값 유형이 저장됩니까?

C#의 헛소리와 볼트를 파헤 치면서 개체가 힙에 저장되었거나 힙에 저장된 개체의 값 형식이 스택에 저장 되었기 때문에 궁금합니다.

답변

6

참조 유형에 할당 된 메모리 내부에 힙에 저장됩니다. 또한, value types are often stored in places other than "the stack". 그러나 CLI 사양은 값 유형을 저장하는 메모리 풀이 어디에 위치 하는지를 지정하지 않습니다. 중요하지 않아야 할 구현 세부 사항입니다.

+0

멋진 기사, 감사합니다! – BoredOfBinary

3

이들은 오브젝트 자체와 함께 힙에 저장됩니다. 이것에 대해 생각해 볼 수있는 좋은 방법은 객체 (상태의 일부로 값 유형을 가짐)가 힙에 할당되면 값 유형도 거기에 있어야한다는 것입니다. 그렇지 않으면 해당 값 유형이 스택이 unwound 되 자마자 사라질 것입니다 객체를 생성 한 코드.

1

예, 힙의 일부로 저장됩니다. 그러나 Eric Lippert가 여러 차례에 걸쳐 설명했듯이 모든 구현 세부 사항입니다. 가장 최근의 블로그 게시물 인 this을 읽고, thesetwo도 중요하다고 생각합니다.

+0

위대한 기사, 감사합니다! BTW 너의 책을 사랑해, 지금 그것을 읽고있을거야! – BoredOfBinary

9

앤드류 헤어가 옳습니다. 전체 자세한 내용은 Eric Lippert's blog entry 참조 : 나는 "값 유형이 스택에 간다"고 신화에 의해 방해하고있어

... 일반적으로 잘못 적혀있다 : 명령문 값 유형에 저장 될 수있다 "이어야합니다 스택 "은보다 일반적인"값 유형 "이 아니라 항상 스택에 저장됩니다.

+1

+1 "나는 신화에 겁 먹었다." – Gabe

관련 문제