# 프로세스의 메모리 구조

alt text

  • 스택은 위 주소부터 할당, 힙은 아래 주소부터 할당

# 스택

  • 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정
  • 하지만 함수가 함수를 호출하는 등에 따라 런타임시에도 크기 변경 가능
  • 동적 할당

#

  • 힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정
  • 동적 할당

# 데이터 영역

  • BSS 영역과 Data 영역으로 나뉘고 정적 할당에 관한 부분 담당
  • 정적 할당

# 코드영역

  • 소스코드 저장
  • 정적 할당

# 정적 할당

  • 컴파일 단계에서 메모리를 할당하는 것
  • BSS 영역은 전역변수, static, const로 선언되어 있는 변수 중 0으로 초기화 또는 초기화가 되어 잇지 않은 변수들이 할당됨
  • Data 영역은 전역변수, static, const로 선언되어 있는 변수 중 0이 아닌 값으로 초기화된 변수들이 할당됨
  • Code, Text 영역은 프로그램의 코드가 저장됨

# 동적 할당

  • 런타임 단계에서 메모리를 할당받는 것
  • Stack은 지역변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역. 함수 호출 마다 호출 환경 등의 정보가 계속해서 저장됨
    • 재귀 함수 같은 경우 새로운 스택 프레임이 매번 사용되기 때문에 함수 내의 변수 집합이 다른 인스턴스 변수를 방해하지 않음
  • Heap은 동적으로 할당되는 변수 저장. malloc, free 등을 통해 관리 가능하며 동적으로 관리 되는 자료구조가 사용
    • vector가 내부적으로 Heap 영역 사용