HIT해

[CS] 프로세스 메모리 본문

CS

[CS] 프로세스 메모리

힛해 2025. 6. 13. 04:15
728x90

프로세스 메모리란?

메모리 내 데이터를 일시적으로 기억해두는 영역이다.

각 프로세스는 자신만의 주소 공간을 갖고, 그에 상응하는 메모리를 필요로 한다.

프로그램 실행 관점에서, 기억 공간을 연결하기 위해 참조바인딩 개념을 활용한다.

참조

  • 주소와 변수 간의 관계를 의미한다.
  • 메모리 내 위치를 참조하기 위해 주소(수치화된 값)를 사용한다.
  • 수치 주소를 기억하기 어렵기 때문에, 이름을 붙인 변수를 사용한다.

바인딩

  • 변수와 기억장소(메모리) 간의 관계를 의미한다.
  • 변수에 기억장소를 할당하는 것은 특정 메모리 공간을 바인딩하는 것과 같다.
  • 즉, 변수를 실제 저장되는 값과 연결짓는 과정이다.

 

메모리 할당영역

 

스택 메모리

  • 지역 변수, 함수 호출, 함수 매개변수 등 자동 변수가 저장되는 영역이다.
  • 블록 내 생성된 지역 변수를 처리하기 위해 사용된다.
  • 함수 호출 및 return마다 크기가 늘어나거나 줄어든다.
  • 함수 호출 시 활성 레코드(스택 프레임)가 푸시되고, 함수 종료 시 자동 소멸한다.
    (* 활성 레코드란 함수가 필요로 하는 수행 환경(매개변수, 반환 주소 등)이 저장되는 영역이다.)
  • 스택은 왜 높은 주소에서 낮은 주소로 할당될까?
    - 힙은 낮은 주소에서 위(높은 주소)로, 스택은 높은 주소에서 아래(낮은 주소)로 확장된다.
    - 이렇게 하면 두 영역이 충돌하기 전까지 메모리를 효율적으로 사용할 수 있기 때문이다.
  • 스택의 크기는 왜 정적으로 할당될까?
    - 프로그램 시작 시 운영체제나 JVM 등 실행 환경에서 미리 크기를 정한다.
    - 함수 호출, 지역 변수 등은 컴파일 타임에 크기가 예측 가능해서 빠르고 단순하게 관리할 수 있다.
    - 동적으로 크기를 바꾸면 관리가 복잡해지고 안정성이 떨어지기 때문에, 정적으로 할당한다.
  • 메모리를 자동으로 관리한다(함수 호출/종료에 따라 자동 할당/해제).
  • 접근 속도가 매우 빠르다.
    - 스택은 LIFO 구조라서 최근 데이터에 바로 접근할 수 있다.
    - 할당/해제가 단순한 포인터 이동으로 처리되어 오버헤드가 거의 없다.
    - CPU 캐시와도 가까워서 속도가 빠르다.

 

힙 메모리

  • 어플리케이션이 운영체제로부터 미리 할당받는 메모리 영역이다.
  • 프로그램 실행 중에 동적으로 할당되는 메모리 영역이다.
  • 힙은 왜 주소공간상에서 위쪽(낮은 주소→높은 주소)으로 확장될까?
    - 스택과 반대 방향으로 확장하면, 두 영역이 충돌하기 전까지 메모리를 최대한 사용할 수 있기 때문이다.
  • 개발자가 직접 할당/해제해야 하지만, 자바에서는 GC(Garbage Collector)가 자동으로 해제한다.
  • 객체, 배열 등 참조형 데이터가 저장된다.

 

왜 스택과 힙으로 나누었을까

효율적인 메모리 관리와 성능

스택은 단순한 구조로 CPU가 효율적으로 처리할 수 있고

힙은 전역적으로 접근이 가능하고 복잡한 구조의 데이터를 저장할 수 있다.

 

안정성과 보안

스택은 크기가 고정되어있어 오버플로우를 빠르게 감지할 수 있다.

 

 

포스팅에 참고한 사이트 : http://www.ktword.co.kr/test/view/view.php?nav=2&no=5981&sh=%EC%8A%A4%ED%83%9D

'CS' 카테고리의 다른 글

[CS] Overflow와 Underflow  (0) 2025.06.16
[CS] 기본형과 참조형의 차이  (1) 2025.06.12
[CS] 웹 프로토콜  (1) 2025.05.30
[CS] 암호 Cypher  (0) 2025.05.29
[CS] REST API  (1) 2025.05.27