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