본문 바로가기
프로그래밍/c#

c# 메모리 구조, 메모리 영역(스택, 힙, 데이터, 코드)

by 지나팩 2023. 7. 27.

작성한 프로그램을 실행하게 되면 메모리에 각각의 데이터들이 저장되며 필요에 따라 쓰고 지우고를 반복하며 프로그램이 실행됩니다. 그리고 그 필요에 따라 각 데이터의 저장 공간이 구분되어 저장됩니다.

 

대표적으로 나누는 4개의 영역에 대해 알아보겠습니다.

1. 코드 영역

  • 프로그램의 실행 코드가 저장되는 공간입니다.
  • C# 프로그램은 MSIL (Microsoft Intermediate Language) 또는 CIL (Common Intermediate Language)이라고도 하는 중간 언어로 컴파일되며, 이 MSIL 코드가 코드 영역에 저장됩니다.
  • 실행 시에 CLR (Common Language Runtime)에 의해 MSIL 코드가 실제 기계 코드로 변환되고 실행됩니다.

2. 데이터 영역

  • 정적 변수와 상수, 문자열들이 저장되는 공간입니다.
  • 정적 변수는 프로그램이 시작될 때 메모리에 할당되며, 프로그램이 종료될 때까지 유지됩니다.
  • 동일한 문자열과 상수를 여러 곳에서 사용하는 경우, 상수 풀을 활용하여 중복된 데이터를 하나로 관리합니다.

 

 

 

 

 

 

 

3. 스택 영역

  • 메서드(함수) 호출과 지역 변수들의 저장에 사용됩니다.
  • 각 스레드마다 별도의 스택이 생성됩니다.
  • 스택에는 메서드 호출 시 생성되는 지역 변수, 매개 변수, 메서드의 복귀 주소 등이 저장됩니다.
  • 메서드의 실행이 끝나면 스택에서 해당 메서드와 관련된 데이터가 제거됩니다.

4. 힙 영역

  • 동적으로 할당되는 데이터와 객체들을 저장하는 공간입니다. (보통 클래스)
  • new 연산자를 사용하여 객체를 생성하거나 메모리를 동적으로 할당할 때 힙이 사용됩니다.
  • 힙에 저장된 데이터와 객체들은 가비지 컬렉션(Garbage Collection)에 의해 관리됩니다.

 

보통은 4개의 영역으로 나누는데, 더 세분하게 5~6개로 나누기도 합니다.

내부적으로 보면 더 많은 내용들이 있겠지만 이렇게만 알아두셔도 어떻게 메모리 구성되어 있고 활용되는지 충분히 알 수 있습니다.

 

 

https://play.google.com/store/apps/details?id=com.goldenegg

 

골든 에그 - Google Play 앱

수박 게임류의 머지 게임입니다.

play.google.com

 

댓글