ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [메모리 구조] 힙(heap)영역과 & 스택(stack)의 차이
    IT/CS지식 2022. 6. 16. 16:10
    메모리의 구조

     

    프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load) 되어야 한다. 또한 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 아래와 같다.

     

     

    1. 코드(code) 영역

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

     

     

    2. 데이터(data) 영역

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

     

     

    3. 힙(heap) 영역

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

     

    heap은 객체들 즉) 참조형 데이터들이 저장되어 있다. reference타입은 값을 비교할 때 참조 주소를 비교하게 된다. 따라서 참조형 데이터인 래퍼클래스들은 equals()로 값을 비교해야한다.

     

     

    < 힙 영역의 장점 >

    - 변수는 전역적으로 액세스 할 수 있다.

    - 메모리 크기 제한이 없다

    - 상대적으로 느린 액세스

    - 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가 조각화 되어 해제될 수 있다. 

    - 메모리를 관리해야 한다.

    - 변수는 C언어 realloc() 또는 자바 new를 사용

     

     

    4. 스택(stack) 영역

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

     

    stack에는 기본형 변수들이 저장된다. 따라서 ==를 통해 값을 비교할 수 있다.

     

    < 스택 영역 장점 >

    - 매우 빠른 액세스

    - 변수를 명시적으로 할당 해제할 필요가 없다

    - 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않는다.

    - 지역 변수만 해당된다.

    - 스택 크기 제한

    - 변수의 크기를 조정할 수 없다. 

     

    힙(heap) 영역에는 인스턴스(인스턴스변수, 객체)가 생성되는 영역이며, 지역변수는 호출스택(call stack)에 생성된다.
    반응형

    댓글

Designed by Tistory.