728x90
윈도우 프로그램은 기본적으로 하나의 스레드를 가진다. 그리고 이 스레드마다 저장소가 메모리에 개별적으로 할당되는데 이 영역이 스택이다.(기본 1MB 할당)
개발자가 변수를 선언하면 스택의 어떤 영역을 사용하게 된다. C# 컴파일러가 변수 선언에 대한 스택 메모리를 할당해주는 것이다. 그리고 좋은 점은 이 컴파일러가 알아서 스택의 메모리도 해제해준다.
힙은 이와 달리 프로그램에서 추가적으로 메모리를 요청하면 할당되는 저장소다. 스택보다 유연한 느낌이지 않는가? 좋아보이지만, 그렇다고 힙 메모리를 남발하면 프로그램 성능 저하가 올 수 있다는 점을 알아두자.
힙에 메모리를 할당하는 것은 개발자가 명시적으로 요청한 것이므로 해제도 해줘야한다. 하지만 C#은 이것도 GC(Garbage Collector, 가비지 콜렉터)라는 놈이 알아서 해주게 되었다.
-
C나 C++ 같은 네이티브 환경의 언어들은 직접 메모리 해제를 해줘야한다. 이 차이는 Java나 C# 같이 가상머신(Virtual Machine) 상에서 구동되는 언어의 특징에서 나온다.
-
닷넷에서는 CLR(Common Language Runtime)에서 프로그램이 사용할 이 힙을 관리한다.
물론 스택과 힙의 개념이나 동작은 훨씬 더 내용이 많으나, 일단은 이 정도로만 알아놓자.
728x90
'개발 > C#' 카테고리의 다른 글
List - 리스트 (0) | 2020.07.14 |
---|---|
값형식과 참조형식 (0) | 2020.07.13 |
? / ?? - C#의 물음표 (0) | 2020.07.13 |
Delegate - 델리게이트 (0) | 2020.07.11 |
Property - 프로퍼티 (3) | 2020.07.09 |
댓글