Malloc과 New의 차이점

Anonim

Malloc vs New

One 컴퓨터 프로그래머를 고용 할 때 가장 자주하는 면접 질문은 신청자 / 컴퓨터 프로그래머가 malloc과 new 사이의 차이점을 설명하는 것입니다. malloc과 new는 모두 컴퓨터 언어 영역에 존재하며 동적 메모리 할당을 위해 종종 컴퓨터 프로그래머에 의해 사용됩니다.

두 가지의 기본적인 차이점은 malloc은 C 언어에 존재하지만 new는 C ++ 언어의 특정 기능이라는 것입니다. Malloc은 새로운 프로그래머가 실행 시간을 단축시키는 반면에, Malloc은 또한 (프로그래머에게는 실행 시간이 필요하다) 함수이다. 실시간 프로그래밍을하는 프로그래머는 사용하는 데 가장 빠른 방법을 선택할 필요가 있기 때문에 이것은 새로운 연산자의 이점입니다.

new 연산자는 malloc 함수와는 달리 타입 안전합니다.

함수 malloc은 C 언어를위한 라이브러리 함수이다. 메모리를 할당하고 포인터를 반환하는 것뿐입니다. 반면 new 연산자는 언어 수준의 구조이며 메모리를 할당하고 적절한 생성자를 호출하여 객체를 인스턴스화하는 역할을합니다. 새로운 연산자 malloc의 또 다른 차이점은 malloc은 선언 중에 typecasting을 요구하지만 malloc은 선언하지 않는다는 것입니다. 또한 malloc 함수는 "free"라는 단어를 사용하여 메모리를 지우는 반면 "delete"는 비슷한 목적으로 new 연산자에서 사용됩니다.

두 사람은 또한 실패와 기억력 고갈을 다룰 수있는 방법이 다릅니다. 함수 malloc이 실패하면 NULL 포인터를 반환합니다. 연산자 new는 NULL 포인터를 반환하지 않지만 대신 예외를 throw하여 실패를 나타냅니다. 이것은 컴퓨터 프로그래머가 new를 호출 할 때마다 반환 된 포인터를 검사 할 필요가 없기 때문에 컴퓨터 프로그래머가 그러한 예외를 놓치지 않을 것이기 때문에 operator new에 대한 이점입니다.

함수 malloc은 객체 (객체의 생성자)를 생성하지 않지만 new 연산자는 생성합니다. new의 또 다른 이점은 연산자가 오버로드 될 수 있고 malloc 함수는 오버로드 될 수 없다는 것입니다. 연산자 new는 할당 할 특정 수의 객체를 요구하며, 함수 malloc은 할당 할 총 바이트 수를 지정해야합니다.

메모리는 realloc을 사용하여 malloc 함수를 사용하여 크기를 조정하거나 재 할당 할 수도 있습니다. 그러나 new 연산자는이 함수를 수행 할 수 없으며 연산자의 주요 단점 중 하나로 간주합니다. operator malloc의 새로운 장점은 malloc이 메모리 양을 빠르게 확장 할 수 있다는 것입니다. 이것은 여전히 ​​malloc과 realloc을 사용하고 있습니다. 프로그래머는 C ++ 언어에서 동일한 상황을 수행 할 때 operator new를 사용하여 새로운 메모리 덩어리를 만들어야합니다. 새 메모리는 수정 된 크기를 가져야하며 원래 버퍼의 데이터를 통해 복사됩니다.원본 버퍼는 복사 후에 삭제되어야합니다. 이것은 프로그래머에게는 느린 프로세스 일 수 있습니다.

operator new는 함수가 void *를 반환하는 동안 정확한 데이터 유형을 반환함으로써 malloc 함수보다 영향력이 있습니다. 함수 malloc은 과부하가 가능한 연산자 new에 비해 과부하 될 수 없습니다. 새로운 연산자의 또 다른 특징은 함수 malloc에 ​​비해 연산자로 실수를 할 확률이 적다는 점입니다. 특히 많은 수의 코드를 작성하거나 엄격한 일정으로 코드를 작성하는 경우에는 프로그래머에게 이점으로 간주됩니다. 함수 malloc과 free는 C ++에서 사용할 수 있지만 직접 사용할 수는 없습니다. new를 사용하고 delete를 사용하는 것이 좋습니다.

요약:

1. Malloc은 함수이고 new는 연산자입니다. 2. New는 C ++ 언어의 특정 기능이며 malloc은 C 언어로 사용됩니다. 3. new 연산자는 "delete"로, malloc 함수는 "free"로 사용됩니다. "

4. 함수 malloc은 C 언어의 라이브러리 함수이고 new 연산자는 C ++ 언어의 언어 수준 구문입니다.