프로세스의 메모리 구조

고장난 고양이·2022년 7월 14일
0

운영체제

목록 보기
7/21

운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당합니다.

프로세스 메모리 영역

프로세스의 주소 공간은 코드(code), 데이터(data), 스택(stack), 힙(heap) 영역으로 구성된다.

이러한 주소 공간을 우리는 가상 메모리라고 부른다.

code 영역

  • 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간
  • 컴파일(compile) 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 되어있다.

data 영역

  • 전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간
  • 데이터영역은 BSS영역과 Data영역으로 나뉘고, BSS영역은 초기화가 되지 않는 변수가 0으로 초기화되어 저장되며 DATA영역은 0ㅇ이 아닌 다른 값으로 할당된 변수들이 저장됩니다.
  • 전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다. 전역변수가 변경 될 수도 있어 Read-Write로 되어있다.

stack 영역

  • 스택에는 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 가집니다.

  • 이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다. 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법을 따른다.

  • 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생한다.

heap 영역

  • 힙은 동적할당할때 사용되며 런타임 시 크기가 결정됩니다. 예를 들어 벡터같은 동적 배열은 당연히 힙에 동적할당 됩니다.
  • 프로그래머가 필요할 때마다 사용하는 메모리 영역
  • heap 영역은 런타임에 결정된다. 자바에서는 객체가 heap영역에 생성되고 GC에 의해 정리된다.

참고
https://zangzangs.tistory.com/107

profile
개발새발X발일지

0개의 댓글