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 |