class는 참조(System.Object), struct는 값(System.Value)
 
C++하다가 C#하면 헷갈리는 것 중 하나.
MyStruct myStructObj = new MyStruct(); // myStructObj는 스택에~
요로케 백날 해봤자 이건 힙에 생기지 않는다는거~
 
C++에서는 동적할당(즉, new나 malloc 등)을 받으면 무조건 힙에 쌓였지만 C#에서는 그 타입에 따라서 결정된다.
객체 생성 시 struct는 항상 스택에 생기고, class는 항상 힙에 생긴다.
 
물론 Boxing을 통해 struct도 힙에 위치시킬 수 있다.
잠깐... struct를 힙에 위치시킨다는 표현이 맞긴 맞는건가?

object myObj = myStructObj; // Boxing
 
이렇게 되면 MyStruct 구조체 데이터가 힙에 생기고 여기에 값을 복사한다. 그리고 그 참조를 myObj가 갖는다.
그럼 도대체 뭐냐?
struct가 힙에 있다고 해야하나?
 
그냥 참조는 힙에 존재하는 인스턴스의 참조라고 생각하자.
힙에 존재하는 인스턴스 자체는 값타입이고 참조타입이고 따위는 생각할 필요가 없는거다;; =_=
 
"값타입은 인스턴스 자체가 스택에, 참조타입은 인스턴스는 힙에 있고 참조가 스택에 있는거다." 라고 글 쓰다가 내맘대로 정리한 본인의 생각... 아님 말고... ㅡ_ㅡ;


싸이 블로그 백업 [2008.06.17 20:30]

+ Recent posts