C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 개념
//c#에서는 struct와 class가 많이 다르다.(c++에서는 거의 동일)
//c#의 메모리 구조
//c++에서는 stack메모리, heap 메모리와 함께 데이터 영역이 별도로 있었다.
//c#에서는 데이터 영여이 stack에 포함된다고 생각하자.
//----------------------------------------------------------------------------
// stack 메모리(데이터 영역 포함)
//----------------------------------------------------------------------------
// 사이즈가 작다.
// struct 선언(new해도 stack이다.)
// 속도가 빠름.
// 지역변수, 함수 파라미터 관리(가비지 커렉터의 대상이 아니다.)
// 복사 시 깊은 복사가 이루어 진다.(값들이 다 새로 할당)
//----------------------------------------------------------------------------
// heap 메모리
//----------------------------------------------------------------------------
// 사이즈가 크다. 램 메모리 그 자체라고 봐도 무방할정도로 크다. (c++에선 동적할당 new 한것들이 들어감)
// class 선언시 할당
// 속도가 좀 느림.
// 복사하면 참조 복사가 된다.
//----------------------------------------------------------------------------
// Boxing, Unboxing(박싱언박싱) - 중요
// stack메모리에서 heap메모리로 넘어가는 것이 Boxing
// heap메모리에서 stack메모리로 넘어가는 것이 UnBoxing
// stack에 있는 것들은 값 형식으로 되어있고(기본 형들( Int, float, double.....)과 enum, struct 등등)
// heap에 있는 것들은 참조 형식이라고 생각하자.(class string array....등등)
'공부 > C#' 카테고리의 다른 글
컬렉션(Collection), 제네릭 컬렉션(Generic Collection) - 예) ArrayList, List<T> (0) | 2016.05.11 |
---|---|
C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 예제소스 (0) | 2016.05.11 |
정렬 Array.Sort, Array.Reverse (0) | 2016.05.10 |
추상 클래스, 추상 함수(abstract), 인터페이스(interface) (0) | 2016.05.09 |
랜덤 (0) | 2016.05.09 |