heap VS stack

About_work·2024년 5월 30일
0

cs 기초

목록 보기
34/38
  • 컴퓨터 프로그래밍에서 힙(heap)과 스택(stack)은 메모리를 할당하고 관리하는 두 가지 주요 방식

스택 (Stack)

  • 스택은 프로그램이 자동으로 관리하는 메모리 영역입
  • 함수 내부에서 선언된 변수들은 스택에 저장
  • 스택은 매우 빠른 액세스 속도를 가지며,
  • 프로그램이 함수를 호출할 때마다 해당 함수의 변수들을, 스택에 푸시(push)하고 함수가 끝나면 팝(pop)하는 방식으로 동작
  • 이는 매우 체계적이고 자동적으로 이루어지기 때문에 개발자가 별도로 관리할 필요가 없습니다.

특징:

  • 속도가 빠름
  • 메모리 사용이 자동으로 관리됨
  • 함수 호출과 깊이에 따라 확장됨
  • 고정된 크기를 가짐 (오버플로우가 발생할 수 있음)

힙 (Heap)

  • 힙은 개발자가 수동으로 관리해야 하는 메모리 영역
  • 필요할 때마다 메모리를 할당하고, 사용이 끝나면 해제해야 합니다.
  • 이는 스택에 비해 더 유연하지만, 관리가 복잡하고 속도가 느릴 수 있습니다.
  • 힙은 동적 메모리 할당에 사용되며, 프로그램 실행 중에 크기가 변할 수 있는 데이터 구조에 주로 사용됩니다.

특징:

  • 속도가 스택에 비해 상대적으로 느림
  • 메모리 사용을 수동으로 관리해야 함
  • 크기가 동적으로 변할 수 있음
  • 메모리 누수, 단편화 등의 문제가 발생할 수 있음

비교

  • 속도: 스택은 힙보다 빠릅니다. 스택은 메모리의 할당과 해제가 명확한 규칙에 따라 일어나기 때문에 관리가 쉽고 빠릅니다.
  • 크기 제한:
    • 스택은 사이즈가 제한적이며, 너무 많은 메모리를 사용하려 하면 스택 오버플로우가 발생할 수 있습니다.
    • 반면, 힙은 사용 가능한 메모리 한도 내에서 크게 확장될 수 있습니다.
  • 메모리 할당/해제:
    • 스택은 함수 호출과 함께 자동으로 메모리가 할당되고 함수가 끝나면 해제됩니다. 힙은 개발자가 직접 할당하고 해제해야 하므로 오류가 발생하기 쉽습니다.

  • 이러한 차이점 때문에, 일반적으로 빠르고 일시적인 로컬 변수는 스택에 할당하고, 프로그램 전반에 걸쳐 사용되거나 크기가 변할 수 있는 데이터는 힙에 할당합니다. 이는 각각의 장단점을 고려한 선택입니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글