Language/C++

[C++] 동적 할당 (malloc, calloc, realloc, new)

마탁이 2020. 12. 13. 16:18

1. new와 malloc의 차이

  1) malloc()은 함수이고 new는 연산자 이다.

     - malloc()은 라이브러리에서 제공하는 함수,

       new는 C++ 언어에서 기본으로 제공하는 키워드(라이브러리 추가 없이 사용가능)

 

  2) malloc()은 보통 사이즈를 매개변수로 받고, Return Type이 'void *' 이므로 sizeof()와 캐스트 연산을 하는 것이 좋음.

     new는 할당할 타입을 지정하면 알아서 할당할 Type의 포인터로 넘어온다.

 

  3) malloc()은 메모리를 동적으로 할당하는 것이 목적이므로 초기값을 지정할 수 없지만,

     new의 경우 할당과 동시에 초기화가 가능하다.

      - new는 생성자를 자동으로 호출한다. (malloc과 new의 가장 큰 차이점)

 

  4) malloc()의 경우에는 realloc 이라는 함수로 재할당이 가능하지만,

     new 는 realloc에 대응하는 것이 없어 [할당 -> 복사 -> 해제] 의 과정이 있어야 한다.

     

 

2. calloc()

  - malloc()과 유사하나 malloc은 할당과 동시에 초기화를 해주지 않지만

    calloc()은 'NULL' 로 초기화 해준다.

  - malloc()은 (5 * sizeof(int)) 와 같이 할당할 전체 데이터의 크기가 들어가지만

    calloc()은 (5, sizeof(int)) 처럼 매개변수를 통해 몇 개를 할당할 것인지, 할당할 1개에 대해 크기를 설정한다.

 

3. realloc()

  - 동적 할당된 메모리의 내용을 유지하면서 할당된 메모리의 크기를 변경해주는 함수.

  - 주소를 다시 할당하면서 메모리 공간(힙)의 문제로 다른 위치로 변경될 수 있다.

  - 주의점

    > void fun_realloc(char *arr)와 같이 단일 포인터를 매개 변수로 전달 시 함수 내에서

       할당된 위치가 변경되며 문제가 발생할 수 있다.

       따라서, void fun_realloc(char **arr)과 같이 이중 포인터를 사용하여 접근한다.

 

'Language > C++' 카테고리의 다른 글

[C++] float 와 double  (0) 2020.12.13
[C++] 배열과 연결 리스트의 차이  (0) 2020.12.13
[C++] Stack과 Heap 의 차이  (0) 2020.12.13
[C++] const 위치에 따른 역할  (0) 2020.12.13
[C++] C / C++ 차이  (2) 2020.12.13