C#의 메모리는 3가지 영역으로 구분된다.
데이터를 보관하는 영역, static 등이 해당된다. static 으로 선언된 데이터는 프로그램이 시작될 때 메모리에 올라왔다가 프로그램이 종료될 때까지 메모리에서 해제되지 않는다.
값형 변수들이 올라오는 영역. 메서드가 종료되면 스택 메모리는 해제된다. 메모리의 스택 영역은 컴파일시에 결정된다.
참조형 변수들이 올라오는 영역. 엄밀히 말하면 참조형 변수들은 스택과 힙을 모두 사용하는데, 힙에는 데이터가 올라오고, 스택에는 힙의 메모리 주소가 올라온다. 메모리의 힙 영역은 런타임시에 결정된다.
복수의 스택이 힙 메모리의 주소만 갖고 있으면 하나의 데이터를 여러 곳에서 사용할 수 있는 형식이기 때문에 전체 메모리 관리에 좋다.
스택과 달리 메서드가 종료되도 사라지지 않는데 –물론 주소를 들고 있는 스택 메모리는 사라짐– 만일 힙 메모리의 주소를 갖고 있는 스택이 없으면 가비지 컬렉터가 수거해 간다.