관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

[C, C++] malloc, free, new, delete 차이점 본문

1. 프로그래밍/5) C++

[C, C++] malloc, free, new, delete 차이점

valuecreatort 2020. 3. 13. 17:13
반응형

그럼 이제 new와 malloc의 차이점에 대해 알아보겠습니다.

 

1.

malloc은 해당 포인터의 타입을 모르기 때문에 리턴값의 자료형은 (void *)입니다. 때문에 malloc함수를 사용시

int * i = (int*) malloc(sizeof(int))로 즉, 자료형을 앞에 선언해 줘야 합니다.

 

하지만 new는 type-safe로 해당 객체에 맞는 포인터로 반환해 줍니다.

때문에 별도의 자료형 선언을 할 필요가 없지요.

(type-safe란 컴파일러가 타입형을 확인해주는 것입니다.

길게 풀어 써 보자면 int형은 int형으로 String형은 String형으로 잘 저장되고 있는지 확인하는 것입니다.)

 

2.

new를 이용해 객체를 생성하면 초기 값을 줄 수 있습니다.

Test a = new Test(123); 이런 식으로요.

즉, new로 객체를 생성하면 생성자가 호출된다는 뜻입니다.

 

하지만 malloc은 생성자 호출 기능이 없습니다.

즉, 초기값을 줄 수 없습니다.

 

3.

new를 통해 객체생성시 에러가 발생하면 예외처리를 하지만

malloc은 예외처리 없이 NULL값을 반환하게 됩니다.

 

4.

malloc은 realloc으로 할당된 메모리 크기를 재조정이 가능합니다.

하지만 new는 할당된 크기에 대한 메모리 재조정이 불가능 합니다.

 

delete와 free의 차이점은 다음과 같습니다.

 

메모리를 해제한다는 점은 같지만

delete는 소멸자를 호출해 줍니다.

하지만 free는 소멸자를 호출해 줄 기능을 갖고 있지 않습니다.

 

 

동적으로 메모리를 할당받게 되면 반드시 해제시켜야 한다고 많이 말씀들 하십니다.

저도 같은 생각이고요.

하지만 프로그램이 다 끝나면 운영체제에서 메모리를 반환해 줍니다.

또한 컴퓨터 성능이 좋아지고 메모리 공간도 많아짐에 따라 굳이 해제의 필요성도 못 느낀다는 경향도 있습니다.

가비지 컬렉터를 사용해 효율적인 메모리 해제를 사용하자는 글도 보았습니다.

 

하지만 메모리 할 당시 해제하는 습관을 드리는 것을 추천을 합니다.

반응형
Comments