본문 바로가기
Tech/OS

메모리 구조

by mozzi329 2023. 1. 6.
728x90

📌 알림


해당 글은 공부 목적으로 작성한 글입니다.

 

📌 메모리 구조


메모리 구조
메모리 구조는 코드 영역, 데이터 영역, 스택 영역, 힙 영역이 있다.

코드(code) 영역

  • 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다.
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.

데이터(data) 영역

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

스택(stack) 영역

  • 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
  • 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
  • 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.
  • 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출된다.
    이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다.
  • 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

힙(heap) 영역

  • 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 메모리 영역이다.
  • 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
  • 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

 

📌 스택과 힙의 차이점


스택(Stack) : 함수를 호출할 때 지역 변수나 함수의 매개변수를 할당하는 공간
힙(Heap) : 런타임 시 생성되는 객체들이 저장되는 공간

두 영역은 같은 물리 메모리 공간을 공유하지만 쓰임새가 다르고 힙은 낮은 주소부터 채워지고 스택은 높은 주소부터 채워지기에 서로의 영역을 누가 침범하느냐에 따라 heap overflow, stack overflow가 발생한다. 

 

📌 힙영역을 크게 잡으면 안되는 이유


JVM GC의 수행 시간이 너무 오래 걸리기 때문이다.

 

📌 모의 면접


메모리 구조에 대해 설명해보세요
메모리 구조는 코드 영역, 데이터 영역, 스택 영역, 힙 영역이 존재합니다.

코드 영역은 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 합니다.
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리합니다.

데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역으로 프로그램의 시작과 함께 할당되고 조료되면 소멸됩니다.

스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.
스택 영역은 함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸합니다. 자료구조의 스택과 동일하게 후입선출의 LIFO 방식을 따라 동작하며, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.

힙 영역은 사용자가 직접 관리할 수 있는 메모리 영역입니다.
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.

스택과 힙의 차이점은 무엇인가요?
두 영역은 같은 물리 메모리 공간을 공유하지만 쓰임새가 다르고 힙은 낮은 주소부터 채워지고 스택은 높은 주소부터 채워지기에 서로의 영역을 누가 침범하느냐에 따라 heap overflow, stack overflow가 발생하게 됩니다.

힙 영역을 너무 크게 잡으면 안되는 이유가 뭘까요?
힙 영역을 너무 크게 잡으면 JVM의 Garbage Collector의 수행 시간이 너무 오래 걸리기 때문에 힙 영역을 너무 크게 잡아서는 안됩니다.

댓글