프로세스 메모리 구조

코드/텍스트 영역

  • 사용자가 작성한 프로그램이 CPU에 실행될 수 있는 기계어(or 컴파일된 명령어) 형태로 저장되는 곳
  • 정적 영역: 컴파일시 결정되고 나면 바뀌지 않으며, 수정 불가능하다.
  • 읽기 전용
  • bin/hex 파일로 되어있다.
  • PC(프로그램 카운터)가 가리키는 곳

데이터 영역

  • 전역(global) 변수 / 정적(static) 변수 / 정적 배열 / 구조체가 저장된다.
  • 정적 영역: 컴파일시에 결정된다. 그러나 안에 있는 데이터의 수정은 가능하다.
  • 읽기/쓰기 가능
  • BSS 영역: 초기화되지 않은 변수들이 저장된다
  • GVAR 영역: 초기화된 변수가 저장된다

 

스택 영역

  • 매개변수 / 지역변수 / 직전 함수의 리턴 주소 등 함수가 호출됐을 때 필요한 데이터가 임시로 저장되는 곳
  • 함수가 호출될 때마다 자신을 호출한 함수 위에 스택 형태로 쌓이는 구조이고, 수행이 완료되면 데이터가 제거된다.

힙 영역

  • 실행중 동적으로 할당되는 데이터(Object)가 저장되는 공간 ex) 객체, 자바의 리스트, 문자열
  • 스택과 힙은 하나의 영역을 공유하며, (양 끝을 사용), 정해진 공간 안에서 데이터가 동적으로 할당되고 해제된다.
  • 데이터가 계속 추가(ex: 함수 무한 호출)되면 서로 영역을 침범하는 상황이 발생하는데, 이를 stack overflow, heap overflow라고 한다.
  • 참조 형태로만 접근이 가능하다
    • ex) 함수에서 객체를 사용한다 -> stack의 객체 변수는 해당 객체의 주소를 갖고 있다 -> 주소로 heap 영역의 객체에 접근한다.

(출처: 야붕님 블로그)

참조

책) 쉽게 배우는 운영체제

https://yaboong.github.io/java/2018/05/26/java-memory-management/

https://zangzangs.tistory.com/107

 

+ Recent posts