공부/C#

C#에서의 struct(구조체)와 class - 메모리 구조 차이, Boxing, Unboxing 개념

미다손 2016. 5. 11. 02:04

//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....등등)