C++ Chapter 7.8 : 스택과 힙
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 7. 함수 : 스택과 힙
🔔 Stack 메모리 특징
- 빠르다
- 크기가 작다.
- 작아서 Overflow가 일어나기 쉽다.
- int array[1000000] 이런거 Overflow 일어나기 쉽고 재귀 호출도 Overflow 일어나기 쉽다.
- 아래에서부터 위로 가는 방향으로 차곡 차곡 순서대로 쌓인다.
#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;
}
🔔 Heap 메모리 특징
- Stack과 다르게 순서대로 쌓이는게 아니라서 Heap 메모리 어느 공간에 저장되게 될지 알 수 없다.
- 단, 크기가 크다.
int main()
{
int *ptr = nullptr;
ptr = new int[1000000];
delete[] ptr;
return 0;
}
Stack
메모리에 ptr 값이 들어온다.Heap
메모리에 sizeof(int) × 1000000 크기만큼의 메모리가 할당된다.- 그리고 할당된 곳의 주소 값이
Stack
메모리의 ptr 에 저장된다.
- 그리고 할당된 곳의 주소 값이
- delete[] ptr
Heap
메모리에 sizeof(int) × 1000000 크기만큼의 메모리가 해제된다.- ptr은 여전히
Heap
메모리에 해제된 그 빈 공간을 가리키고 있으므로 delete한 후에 ptr=nullptr 해주는 습관을 들이자.
메모리 누수
Heap
메모리로부터 동적 할당 받은 공간을 delete 해주지 않은 경우 벌어지는 일
프로그램 종료 후 Stack
메모리의 ptr이 해제되어 동적 할당받은 해당 공간의 주소를 잃어버리게 된다. 주소를 잃어버려 접근 할 수 없는 Heap
메모리 상에서 공간만 차지하는 쓰레기가 되버린다. 이와 같은 길 잃은 메모리들이 쌓이고 쌓이면 메모리 누수 문제가 발생할 수 있다. 그러니 Heap
메모리는 다 쓴 후엔 꼭 수동으로 delete 코드를 넣어 해제해주어야 한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기