본문 바로가기
C++

[c++] 스택(Stack)과 힙(Heap)

by 코모's 2021. 8. 16.
반응형

스택(Stack)힙(Heap)의 메모리적 특징과 차이점을 알아보자.

 

먼저 메모리구조에 대해 알아보자.

 

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

또한, 프로그램에서 사용할 변수를 저장할 메모리가 필요하다.

대표적인 메모리 공간 4가지에 대해서 알아보자.

 

1. Code 영역

  • 실행할 프로그램의 코드를 저장하는 영역이다.
  • cpu는 코드영역에 저장된 명령어를 하나씩 처리한다.

 

2. Data 영역

  • 프로그램의 전역 변수정적변수를 저장하는 영역이다.
  • 프로그램의 시작과 함께 할당되고 프로그램 종료와 함께 소멸된다.

 

3. Stack 영역(값 형식)

  • 함수의 호출과 관련된 지역변수매개변수를 저장하는 영역이다.
  • 함수의 호출과 함께 할당되고 함수의 완료와 함께 소멸된다.
  • 스택영역에 저장되는 함수의 호출정보를 스택 프레임이라고 한다.
  • push() 로 데이터를 저장하며 pop() 으로 데이터를 인출한다.
  • LIFO 후입선출 방식이다. 
  • 장점 : 액세스가 빠르다.
  • 단점 : 메모리 크기를 변경할 수 없다. (컴파일 타임에 크기가 결정됨)

 

4. Heap 영역(참조 형식)

  • 사용자가 직접 관리해야하는 영역이다.
  • 메모리 공간이 사용자에 의해 동적으로 할당/ 해제 된다.
  • GC에 의해 메모리 할당/해제가 이루어진다.(C#)
  • 장점 : 메모리 크기를 동적으로 변경할 수 있다. (런 타임에 크기가 결정됨)
  • 단점 : 엑세스가 느리다.
  • ex) malloc()함수

 

참조하면 좋은 포스팅 : https://www.sysnet.pe.kr/2/0/12624

반응형

'C++' 카테고리의 다른 글

[c++] STL Container의 종류  (0) 2021.08.18
[c++] STL 이란?  (0) 2021.08.18
[c++] 포인터와 레퍼런스  (0) 2021.08.09
[c++]게임 인벤토리  (0) 2020.04.02
[c++]파일 로딩 프로그램  (0) 2020.04.02