Rylah's Study & Daily Life
Modern C++ : 02. Memory Structure - Heap Memory 본문
Heap Memory
- C++는 프로그래머가 메모리를 관리해야되는 Unmanaged Language
- 관리에 실패하게 되면 생기는 문제 : Memory leak, Memory Fragmentation
* Memory Leak
- 흔히 말하는 메모리 누수, 프로그래머의 실수로 인해 발생하는 문제라고 생각한다.
- 사용하고 난 후 해제 되어야 할 메모리가 해제되지 않고 사용되어 발생되는 문제이다.
* Memory Fragmentation
- 사용 가능한 메모리는 충분히 있지만, 할당이 불가능한 상태
- 외부 단편화, 내부 단편화
- 내부 단편화 : 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 메모리 공간이 낭비 된 상황
- 외부 단편화 : 메모리가 할당되고 해제되는 작업이 반복 될 때 작은 메모리가 중간 중간 존재한다.
그러한 메모리가 많게되어 메모리 공간은 있지만, 실제로 할당이 되지 않는 문제를 외부 단편화라 한다.
Heap Memory를 사용 해야 되는 이유
1. Life Cycle
- 함수가 끝나게 되면 stack 메모리에 있는 내용은 사라지므로 문제가 생긴다.
- Heap 메모리에 데이터를 관리하고 stack 메모리에서 접근하는 식으로 하면 Life Cycle 문제가 해결이 된다.
2. Large Size
- Stack의 자원은 한정되어 있다.
- Stack에서 포인터 변수를 만들어서 포인터만 패스하고, 커다란 문제는 힙 메모리에 할당해서 해결하는 것이 좋다.
3. Dynamic(Runtime)
- 포인터만으로 할당을 받고, 동적으로 프로그램 실행과정에서 결정할 수 있게 된다.
#include <iostream>
int main(void)
{
int* ip;
ip = new int; // int size 만큼 할당
*ip = 100; // 100을 할당
std::cout << ip << "\n";
std::cout << *ip << "\n";
delete ip;
return 0;
}
1. main 실행
2. stack 메모링 int 포인터 변수 ip 할당
3. ip = new int로 heap에 메모리 할당되었으며 ip가 100인것을 heap 메모리에 있는 변수 ip에 포인터 변수로 대입한다.
4. ip를 할당 해제한다.
5. main 함수가 종료되어 포인터 변수도 해제된다.
출처 : https://youtu.be/SwgDv8DG4ao
'Study > C++' 카테고리의 다른 글
Modern C++ : 02. Memory Structure - 메모리 릭, 프로세스 메모리, Heap in Process (0) | 2022.02.03 |
---|---|
Modern C++ : 02. Memory Structure - Heap Memory (2) (0) | 2022.02.03 |
Modern C++ : 01. Memory Structure - Stack Memory (0) | 2022.02.03 |
Modern C++ : 01. Memory Structure - Variables Types2 (변수 타입 in Memory) (0) | 2022.02.03 |
Modern C++ : 01. Memory Structure - Variables Types1 (변수 타입 in Memory) (0) | 2022.02.03 |