C++ Chapter 7.8 : 스택과 힙

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 7. 함수 : 스택과 힙

🔔 Stack 메모리 특징

  1. 빠르다
  2. 크기가 작다.
    • 작아서 Overflow가 일어나기 쉽다.
    • int array[1000000] 이런거 Overflow 일어나기 쉽고 재귀 호출도 Overflow 일어나기 쉽다.
  3. 아래에서부터 위로 가는 방향으로 차곡 차곡 순서대로 쌓인다.
#include <iostream>

int g_i = 0;

int second(int x)
{
   return 2 * x;
}

int first(int x)
{
   int y = 3;
   return second(x + y);
}

int main()
{
   using namespace std;

   int a = 1, b;
   b = first(a)
   cout << b << endl;
  
   return 0;
}

image


🔔 Heap 메모리 특징

  1. Stack과 다르게 순서대로 쌓이는게 아니라서 Heap 메모리 어느 공간에 저장되게 될지 알 수 없다.
  2. 단, 크기가 크다.
int main()
{
   int *ptr = nullptr;
   ptr = new int[1000000];

   delete[] ptr;
   return 0;
}
  1. Stack메모리에 ptr 값이 들어온다.
  2. Heap메모리에 sizeof(int) × 1000000 크기만큼의 메모리가 할당된다.
    • 그리고 할당된 곳의 주소 값이 Stack메모리의 ptr 에 저장된다.
  3. delete[] ptr
    • Heap메모리에 sizeof(int) × 1000000 크기만큼의 메모리가 해제된다.
    • ptr은 여전히 Heap메모리에 해제된 그 빈 공간을 가리키고 있으므로 delete한 후에 ptr=nullptr 해주는 습관을 들이자.

메모리 누수

Heap메모리로부터 동적 할당 받은 공간을 delete 해주지 않은 경우 벌어지는 일

프로그램 종료 후 Stack메모리의 ptr이 해제되어 동적 할당받은 해당 공간의 주소를 잃어버리게 된다. 주소를 잃어버려 접근 할 수 없는 Heap메모리 상에서 공간만 차지하는 쓰레기가 되버린다. 이와 같은 길 잃은 메모리들이 쌓이고 쌓이면 메모리 누수 문제가 발생할 수 있다. 그러니 Heap메모리는 다 쓴 후엔 꼭 수동으로 delete 코드를 넣어 해제해주어야 한다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기