C/C++ Memory Allocation

By lhcsoft - 5월 13, 2019

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); // 함수 외부에서도 할당된 메모리를 사용할 수 있다.
    
위 내용은 개인적으로 검토한 내용이므로 참고만 하시기 바랍니다.
감사합니다.

  • Share:

You Might Also Like

0 개의 댓글