힙(Heap)과 스택(Stack)

정윤서·2024년 1월 26일
0
post-custom-banner

힙과 스택은 메모리 관리의 핵심 요소이며, 각각 다른 목적과 기능을 가진다.

힙(Heap)

  • 힙은 동적 메모리 할당에 사용되는 메모리 영역이다. 객체와 같은 메모리가 프로그램 실행 중에 필요할 때 할당되고 해제된다.
  • 자바에서 new 키워드를 사용하여 생성된 객체는 힙에 저장된다.
MyClass obj = new MyClass(); // obj는 힙에 저장된 MyClass 객체를 가리킵니다.
  • 힙은 전역적으로 관리되며, 메모리는 프로그램 실행 중에 할당 및 해제되어 가비지 컬렉터에 의해 더 이상 사용되지 않는 객체가 메모리에서 제거된다.

스택(Stack)

  • 스택은 함수 호출과 지역 변수를 저장하는 데 사용되는 메모리 영역이다. 함수가 호출될 때마다 해당 함수의 정보(반환 주소, 파라미터, 지역 변수 등)가 스택이 저장된다.
  • 함수가 호출되면 그 함수만의 스택 프레임이 생성되고, 함수가 종료되면 해당 스택 프레임이 제거된다.
public void myMethod() {
    int a = 10; // 'a'는 스택에 저장됩니다.
    anotherMethod(); // anotherMethod의 스택 프레임이 스택에 추가됩니다.
}
  • 스택은 함수 호출 순서에 따라 관리되며 LIFO(Last In First Out) 방식으로 동작한다. 함수가 종료되면 해당 함수의 스택 프레임은 스택에서 제거된다.

힙 메모리의 데이터

  • 객체와 배열과 같은 동적 데이터를 저장하는데 사용.
  • 프로그램 실행 중에 힙에 할당된 데이터는 프로그램이 실행되는 동안 접근 가능.
  • 프로그램이 종료되면 힙에 할당된 모든 데이터도 운영 체제에 의해 회수됨. 즉, 프로그램이 종료되면 힙 메모리에 저장된 모든 데이터도 사라짐.

스택 메모리의 데이터

  • 주로 함수의 지역 변수, 파라미터, 반환 주소 등을 저장하는데 사용.
  • 함수가 호출될 때마다 관련 데이터가 스택에 쌓이고, 함수가 종료되면 해당 데이터는 스택에서 제거.
  • 프로그램이 종료되면 스택에 남아있는 모든 데이터도 함께 제거됨. 즉, 프로그램이 끝나면 스택 메모리는 완전히 비워지게 됨.

힙 메모리는 동적 데이터를 저장한다고 했는데, 그럼 스택 메모리는 정적 메모리를 저장하는걸까?
-> 스택은 '정적'이라기보다는 각 함수 호출과 관련된 '지역적'이고 '임시적'인 데이터를 위한 메모리 공간이라고 봐야한다.

프로그램이 종료되면 힙과 스택에 저장된 데이터도 같이 사라지는데 힙과 메모리는 '단기기억 메모리'인가?
-> '단기기억 메모리'는 잠시 동안 정보를 유지한 다음 사라지는 메모리를 말한다. 이 개념을 힙과 스택에 적용한다면 스택은 함수 호출 시마다 생성되고 함수가 끝날 때 제거되므로 단기기억에 가깝다. 반면, 힙은 프로그램 실행 동안 지속적으로 사용되는 데이터를 저장하기 때문에 엄밀히 말하면 '단기기억 메모리'라기보다는 '동적으로 관리되는 장기 메모리'에 더 가깝다.

결론

스택은 프로그램의 메모리 관리 방식에서 중요한 역할을 하는데, 스택은 빠른 속도로 변경되는 임시적인 데이터를 위한 공간이며, 힙은 동적으로 할당되고 해제되는 상대적으로 지속적인 데이터를 위한 공간이다. 이들은 컴퓨터 메모리 관리의 핵심 구성요소로서, 각각 고유의 역할과 특성을 가지고 있다.

post-custom-banner

0개의 댓글