기술 관련 정리

스택(Stack)과 힙(Heap)

bewisesh91 2022. 3. 29. 22:01
728x90

메모리 구조


프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(Load)되어야 합니다.

따라서 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다. 프로그램이 운영체제로부터

할당 받는 대표적인 메모리 공간은 아래 4가지 입니다.

  1. 코드(Code)명령어를 하나씩 가져가서 처리하게 됩니다.
  2. 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부릅니다. 프로세서는 코드 영역에 저장된
  3. 데이터(Data)프로그램이 종료되면 소멸합니다.
  4. 프로그램의 전역 변수와 정적 변수가 저장되는 영역입니다. 데이터 영역은 프로그램의 시작과 함께 할당되며,
  5. 스택(Stack)할당되며, 함수의 호출이 완료되면 소멸합니다.
  6. 함수의 호출과 관련이 있는 지역 변수와 매개 변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께
  7. 힙(Heap)스택과 달리 힙에 작성된 변수는 프로그램의 모든 함수에서 액세스 할 수 있습니다.
  8. 사용자가 직접 관리할 수 있는 메모리 영역입니다. 사용자에 의해 공간이 동적으로 할당되고 해제됩니다.

스택과 힙의 차이


스택은 접근이 아주 빠르게 이루어집니다. 또한, 메모리를 명시적으로 할당하거나 해제할 필요가 없습니다.

하지만 스택에서 만들어진 변수는 해당 스택에서만 유효합니다. 운영체제에 따라 다르지만 스택 크기에도 제한이

있습니다. 반면, 힙은 상대적으로 접근이 느립니다. 그리고 메모리를 명시적으로 할당하고 해제해야 합니다.

효율적인 메모리 공간 사용을 보장하지 않아 메모리 누수가 발생할 가능성이 있습니다. 하지만, 힙의 변수는

전역적으로 접근이 가능하며 메모리 크기가 고정적이지 않습니다.