JAVA__10

AMJ·2023년 2월 24일
0

언어_log

목록 보기
10/57

메모리 구조

  • 프로그램 실행 전 메모리에 로드(load)되어야 한다.
    프로그램에서 사용되는 변수들을 저장할 메모리 필요.

  • 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다.

  • 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지.
    ( 메모리 < 코드, 데이터, 스택, 힙 )

  1. 코드(code) 영역

    • 실행할 프로그램의 코드가 저장되는 곳, 텍스트(code) 영역이라 부르기도 한다.
    • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.
  2. 데이터(data) 영역

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

    • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
    • 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
    • 스택 영역은 push동작으로 데이터를 저장, pop동작으로 데이터를 인출한다.
    • 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다.
    • 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다
cf. 스택 프레임(stack frame)
    스택 영역에 저장되는 함수의 호출 정보를 의미한다
  1. 힙(heap) 영역
    • 사용자가 직접 관리하는 메모리 영역이다.
    • 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
    • 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.(stack의 반대)

스택과 힙의 장단점

스택

  • 매우 빠른 액세스
  • 변수를 명시 적으로 할당 해제 할 필요가 없다.
  • 공간은 CPU에 의해 효율적 관리
  • 메모리는 단편화되지 않는다.

지역 변수

  • 스택 크기 제한 (OS에 따라 다르다)
  • 변수의 크기를 조정 불가.

  • 변수는 전역적으로 액세스 할 수 있다.
  • 메모리 크기 제한 없음
  • (상대적으로) 느린 액세스
  • 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당 된 후 시간이 지남에 따라 메모리가 조각화되어 해제 될 수 있다.
  • 메모리를 관리해야합니다 (변수를 할당하고 해제하는 책임이 있다)
  • 변수는 C언어 realloc() or 자바 new

참고사이트

profile
재미있는 것들

0개의 댓글