CS Basic Concepts

[메모리 개념]- 힙과 스택

doyyy_0 2024. 10. 6. 11:52

1. 스택과 힙의 메모리 관리

컴퓨터 메모리에서 **스택(stack)**과 **힙(heap)**은 각각 다른 방식으로 메모리를 관리하는 영역입니다.

스택(Stack):

  • 정적 메모리 할당: 스택은 컴파일 타임에 크기가 정해지며, 정적 메모리 할당을 통해 함수 호출 시 로컬 변수를 저장합니다.
  • 자동 관리: 함수가 호출될 때 스택 프레임이 할당되고, 함수가 종료되면 스택 프레임이 자동으로 해제됩니다.
  • LIFO(Last In, First Out): 스택의 메모리 관리 방식은 자료구조의 스택과 동일하게 LIFO 방식입니다. 가장 나중에 들어간 데이터가 가장 먼저 제거됩니다.
  • 빠른 할당 및 해제: 스택은 메모리를 빠르게 할당하고 해제할 수 있습니다. 함수 호출과 함께 사용되는 임시 변수에 적합합니다.
  • 메모리 크기 제한: 스택에는 크기 제한이 있습니다. 너무 큰 메모리를 할당하면 "스택 오버플로우"가 발생할 수 있습니다.

힙(Heap):

  • 동적 메모리 할당: 힙은 런타임에 필요에 따라 동적으로 메모리를 할당합니다. 할당된 메모리는 수동으로 해제해야 합니다(예: new와 delete 또는 malloc과 free 사용).
  • 유연한 크기: 힙은 크기가 유연하고 큰 데이터를 저장하는 데 적합합니다.
  • 느린 메모리 관리: 힙은 스택보다 메모리 할당과 해제 속도가 느립니다. 동적 메모리 관리를 해야 하므로 메모리 누수 또는 불필요한 메모리 사용(단편화)이 발생할 수 있습니다.
  • 할당된 메모리의 위치를 직접 관리: 프로그램이 명시적으로 해제하지 않으면 메모리는 계속 차지한 상태로 남을 수 있습니다.

2. 메모리 개념의 힙,스택과 자료구조 개념의 힙,스택의 개념 혼동

스택과 힙은 메모리 관리에서 사용되는 용어일 뿐만 아니라, 둘 다 자료구조에서도 동일한 용어를 사용합니다. 그러나 메모리 관리의 스택과 힙자료구조로서의 스택과 힙과 일부 개념적 유사성을 가지지만, 그 용도는 다릅니다.

스택(Stack)의 용어 관련성:

  • 자료구조로서의 스택: LIFO(Last In, First Out) 원칙을 따르는 자료구조입니다. 데이터를 삽입(push)하거나 제거(pop)하는 방식이 메모리 관리에서 스택의 동작과 유사합니다.
  • 메모리 스택: 메모리 관리에서도 함수 호출 시 새로운 스택 프레임이 스택의 맨 위에 추가되고, 함수가 종료되면 스택에서 제거됩니다. 이는 자료구조의 스택과 동일한 LIFO 방식입니다. 예를들어 아래의 코드를 보면,가장 최근에 호출된 함수가 가장 먼저 끝나고 다시 그 전 함수로 돌아가는 구조는 LIFO와 동일합니다.
void functionA() {
    // functionA의 로컬 변수들이 스택에 저장됨
    functionB();
    // functionB가 끝나면, functionA로 돌아오고 functionA의 작업이 이어짐
}

void functionB() {
    // functionB의 로컬 변수들이 functionA 위에 저장됨
    // functionB가 끝나면, 그 변수들이 스택에서 사라짐
}

 

힙(Heap)의 용어 관련성:

  • 자료구조로서의 힙: 트리 기반의 자료구조로, 일반적으로 우선순위 큐를 구현할 때 사용됩니다. 힙 자료구조는 최소값 또는 최대값을 빠르게 찾아내기 위한 구조입니다.
  • 메모리 힙: 메모리 관리에서의 힙은 동적 메모리를 할당하는 영역으로, 자료구조에서의 힙과는 완전히 다른 개념입니다. 다만, 두 용어 모두 "할당된 메모리나 데이터가 자유롭게 변화 가능한 공간"이라는 점에서 용어가 유사할 수 있습니다.

3. 정리

  • 메모리 관리에서의 스택은 함수 호출 시 사용되는 메모리 공간을 관리하며, LIFO 방식으로 동작하여 자료구조로서의 스택과 유사한 개념을 따릅니다.
  • 메모리 관리에서의 힙은 동적 메모리 할당을 위한 공간이며, 자료구조에서의 **힙(우선순위 큐)**과는 용어는 같지만 실제 동작은 전혀 다릅니다.

따라서 스택은 자료구조와 메모리 관리 두 가지 모두에서 유사한 방식으로 사용되지만, 힙은 용어의 유사성만 있을 뿐 실제 용도는 전혀 다릅니다.