C/C++에서 memory allocation하는 방법은 다음과 같이 3가지가 있다.
- Static, Automatic, Dynamic Memory Allocation
1. Static Allocation
- static으로 할당된 메모리는 program의 lifetime에 따라 메모리가 할당되고 해제된다.
- 사용예제
int a = 100; // 함수 외부에서 선언하는 경우
static int a = 32; // 함수 내, 외부에서 선언하는 경우
2. Automatic Memory Allocation
- 함수내 지역변수 선언시 메모리가 할당되는 방식이다.
- 순차적인 방식으로 메모리에 할당된다.
- 역순(First-In, LastOut)으로 메모리가 해제된다.
- Stack 형식으로 순차적으로 메모리가 할당되어 Heap 영역에 할당하는 Dynamic memory allocation 방식보다
속도가 빠르다.(주소를 찾는 과정이 빠르기 때문)
- 사용예제
void func() {
int i; // 단지 함수 안에서만 메모리에 할당되고, 함수 종료시 메모리에서 해제된다.
}
3. Dynamic Memory Allocation
- Heap 메모리 영역에 할당된다.
- Static 형식으로 할당되는 Automatic Memory Allocation보다 메모리 할당이 느리다.
- 메모리 해제를 직접 해주어야 한다.
- 해제를 위해 delete or delete[]를 사용한다.
- 해제하는 과정을 하지 않으면 memory leaks이 발생한다.
- memory fragmentation이 발생할 수 있다.
- compile 시점에 할당할 메모리 크기를 모를때나 함수를 빠져나와도 메모리가 유지되어야
하는 경우 등에 사용한다.
- 사용예제
int * function(int variableSize) {
int * mem = malloc(variableSize);
}
int * mem = function(1024); // 함수 외부에서도 할당된 메모리를 사용할 수 있다.
위 내용은 개인적으로 검토한 내용이므로 참고만 하시기 바랍니다.
감사합니다.
0 개의 댓글