프로세스의 메모리 구조

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

운영체제

목록 보기
7/21
post-custom-banner

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

프로세스 메모리 영역

프로세스의 주소 공간은 코드(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발일지
post-custom-banner

0개의 댓글