Language/C, C++, C#

[C, C++] 동적 메모리 할당 비교

byunghyun23 2023. 11. 24. 15:07

동적 변수를 생성(동적 메모리 할당)할 때, C와 C++의 차이를 비교해 보겠습니다.
먼저, 변수 선언과 해제 방법은 다음과 같습니다.
 

# C
int *arr = (int*)malloc(5 * sizeof(int));
free(arr);

# C++
int *arr = new int[5];
delete[] arr;

 
둘의 차이점은 다음과 같습니다.
 
1. 문법
C: malloc 함수는 사용할 메모리의 크기를 바이트 단위로 지정하고, 할당된 메모리의 포인터를 반환합니다.
C++: new 키워드는 할당할 객체의 자료형과 사이즈를 지정하고, 해당 자료형의 포인터를 반환합니다.
 
2. 자료형 정보
C: 메모리를 단순히 바이트 단위로 할당하므로 자료형 정보가 없습니다.
따라서 사용자는 할당된 메모리에 대한 자료형 변환을 명시적으로 수행해야 합니다.
C++: 명시적인 형변환이 필요하지 않습니다.
 
3. 생성자 호출
C: 메모리만 할당하며, 생성자 호출은 수동으로 수행해야 합니다.
C++: 생성자를 호출하므로 객체가 초기화됩니다.
 
4. 배열 할당
C:  배열을 동적으로 할당하려면 메모리 크기에 배열의 크기를 곱해야 합니다. ( 5 * sizeof(int) )
C++: 배열의 크기를 지정할 수 있습니다.
 
5. 배열 해제
C: free 함수를 사용하여 메모리를 해제합니다.
C++: delete 키워드를 사용하여 메모리를 해제합니다.
 
가장 중요한 차이점은 메모리 관리 철학입니다.
malloc은 메모리만을 할당하므로 객체의 생성자나 소멸자가 호출되지 않습니다.
즉, 메모리 확보와 초기화에 대한 책임은 프로그래머에게 있습니다.
반면, new는 객체를 할당하면 해당 객체의 생성자가 호출되어 초기화됩니다.
따라서 초기화에 필요한 작업을 생성자에 구현할 수 있습니다.