개념 Self Study📝/알고가자

메모리의 구조 및 C# 데이터 형식

코딩 욕심쟁이 2023. 7. 25. 11:21

1. 개요 

면접 질문의 단골멘트 메모리의 구조에 대해서 간단하게 알고 그것이 C#에서 적용되는것을 알아가보고자 한다.

 

2. 메모리의 구조

  • 메모리
    1. 프로그램 실행요청
    2. 프로그램의 정보를 읽어 메모리에 로드한다.
    3. CPU는 프로그램 코드를 가져다 메모리를 관리하고 명령문을 실행한다.
    4. 동적메모리가 할당되면 FreeStore영역을  사용한다.
    5. 스택메모리가 할당되면 FreeStore영역을 사용한다.

위 그림과 같이 프로그램이 실행되기 위해서는 운영체제가 프로그램의 정보를 메모리에 로드해야한다. 또한, 프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는, 메모리가 명령어와 데이터들을 저장해야한다.

이렇게 프로그램이 운영체제로 부터 할당받는 대표적인 메모리 공간은  코드영역, 데이터 영역, 힙 영역, 스택 영역으로 구성되어 있다.

 

  • 코드 영역
    • 코드 영역은 실행할 프로그램의 코드가 저장되는 영역이다.
    • 텍스트 영역이라고 부르기도 한다.
    • CPU는 코드 영역에 저장된 명령을 하나씩 가져가서 처리하게 된다.
    • 프로그램이 시작하고 종료될 때 까지 메모리에 계속 남아 있는다.

 

  • 데이터 영역
    • 프로그램의 전역변수와 정적변수가 저장되는 영역이다.
    • 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸한다.

 

힙 영역과 스택 영역

  • 힙 영역
    • 힙 영역은 프로그래머가 직접 공간을 할당, 해제하는 메모리 공간이다.
    • 힙 영역에서 malloc() 또는 new 연산자를 통해 메모리를 할당, free()또는 delete연산자를 통해 메모리를 해제한다.
    • 힙 영역은 선입선출 방식 → 이는 힙 영역이 메모리의 낮은 주소에서 높은 주소 방향으로 할당되기 때문임.
    • 위 그림을 설명하면, 위(낮은 주소) 부터 차곡차곡 아래(높은 주소) 방향으로 데이터가 쌓인다고 생각하면 된다.

 

  • 스택 영역
    • 스택 영역은 프로그램이 자동으로 사용하는 임시 메모리 영역이다.
    • 함수 호출 시 생성되는 지역 변수매개 변수가 저장되는 영역이고, 함수 호출이 완료되면 사라진다.
    • 스택 영역에서는 push로 데이터를 저장하고, 팝으로 데이터를 인출한다.
    • 스택 영역은 후입 선출 방식 → 스택 영역이 메모리의 높은 주소에서 낮은 주소의 방향으로 할당 되기 때문임.

 

3. C#의 데이터 형식

 

값 형식과 참조 형식

 

  • 값 형식
    • 변수가 값을 담는 데이터 형식
    • 값 형식의 데이터는 스택 메모리 영역에 올라간다.
{                 // 1. 블록 시작
  int a = 100;   // 2. 변수 a 선언 및 초기화 
  int b = 200;   // 3. 변수 b 선언 및 초기화
}
  • 참조 형식
    • 참조 형식은 변수가 값 대신 해당 값이 있는 곳의 위치를 담는 데이터 형식
    • 참조 형식의 데이터는 힙 메모리 영역에 올라간다.
{                  // 1. 블록 시작
  object a = 100;  // 2. 변수 a 생성 및 초기화
  object b = 200;  // 3. 변수 b 생성 및 초기화
}                 // 4. 블록 종료

- 기본적으로 힙 메모리 영역에 올라가는 데이터는 사용자가 직접 동적할당 하는 메모리 영역이다.

▶C++에서는 사용자가 동적할당했으면 직접 메모리를 해제 해야한다.

▶즉 힙 메모리 영역에 올라간 데이터는 기본적으로 자기 스스로 제거하는 매커니즘은 아니다.

 

 

대신 C#은 C++과 달리 동적할당된(힙 메모리 영역에 있는 메모리) 메모리를 직접 해제하지 않아도 된다.

 

참고

https://developer-talk.tistory.com/50

https://all-young.tistory.com/17

https://marmelo12.tistory.com/376