추천, 2024

에디터의 선택

new와 malloc 사이의 차이점 ()

new와 malloc ()은 모두 동적으로 메모리를 할당하는 데 사용됩니다. new와 malloc은 많은 문맥에서 다르다. new와 malloc () 사이의 주된 차이점은 new가 구조체로 사용되는 연산자라는 것입니다. 반면 malloc () 은 표준 라이브러리 함수로 런타임에 메모리를 할당하는 데 사용됩니다. 이들의 다른 차이점은 비교 차트에서 아래에서 설명합니다.

비교 차트

비교의 근거새로운malloc ()
언어새로운 연산자는 C ++, Java 및 C #의 특정 기능입니다.malloc () 함수는 C의 기능입니다.
자연"new"는 연산자입니다.malloc ()은 함수입니다.
sizeof ()new는 sizeof 연산자를 필요로하지 않습니다. 특정 유형에 충분한 메모리를 할당합니다.malloc은 sizeof 연산자가 할당해야하는 메모리 크기를 알아야합니다.
건설자연산자 new는 객체의 생성자를 호출 할 수 있습니다.malloc ()은 전혀 생성자를 호출 할 수 없다.
초기화new 연산자는 객체를 초기화하면서 객체를 메모리에 할당 할 수 있습니다.malloc에서 메모리 초기화를 수행 할 수 없습니다.
오버로딩새로운 운전자에게 과부하가 걸릴 수 있습니다.malloc ()은 결코 오버로드 될 수 없습니다.
실패실패하면 operator new가 예외를 throw합니다.실패하면 malloc ()은 NULL을 반환합니다.
할당 해제new에 의한 메모리 할당은 "delete"를 사용하여 할당 해제됩니다.malloc ()에 의한 메모리 할당은 free () 함수를 사용하여 할당 해제됩니다.
재 할당새 연산자는 메모리를 재 할당하지 않습니다.malloc ()에 의해 할당 된 메모리는 realloc ()을 사용하여 재 할당 될 수 있습니다.
실행new 연산자는 실행 시간을 줄입니다.malloc ()은 실행에 더 많은 시간을 요구합니다.

새로운 정의

new 연산자는 메모리를 동적으로 할당하는 메모리 할당 연산자입니다. new 연산자는 힙에 메모리를 할당하고 참조 변수에 할당 된 해당 메모리의 시작 주소를 반환합니다. new 연산자는 C의 malloc ()과 비슷합니다. 그러나 C ++ 컴파일러는 malloc ()과 호환되지만 malloc ()보다 몇 가지 장점이 있으므로 new 연산자를 사용하는 것이 가장 좋습니다. new 연산자의 구문은 다음과 같습니다.

 타입 variable_name = 새로운 타입 (parameter_list); 

여기서 "type"은 메모리를 할당해야하는 변수의 데이터 유형을 나타냅니다. "variable_name"이라는 단어는 메모리에 대한 포인터를 보유하고있는 참조 변수에 주어진 이름입니다. 여기서 괄호는 생성자의 호출을 지정합니다. parameter_list는 새로 생성 된 개체를 초기화하기 위해 생성자에 전달되는 값의 목록입니다.

new 연산자는 특정 유형의 객체에 필요한 충분한 메모리를 할당합니다. 따라서 sizeof () 연산자가 필요 없으며 realloc ()을 사용하여 메모리를 재 할당하는 malloc ()과 같이 메모리의 크기를 조정해야 할 필요도 없습니다. 새로운 연산자는 구조체입니다. 일반적으로 객체를 초기화하는 데 사용되는 선언을하면서 객체의 생성자를 호출합니다.

새로운 연산자는 힙에 메모리를 할당하고 힙의 크기는 제한적이라는 것을 알고 있습니다. 따라서 힙에 메모리가 부족하여 새 운영자가 메모리를 할당하려고 시도하면 새 운영자가 실패하게됩니다. 새 연산자가 메모리를 할당하지 못하면 예외를 throw하고 코드가 해당 예외를 처리 할 수없는 경우 프로그램이 비정상적으로 종료됩니다.

new 연산자에 의해 할당 된 메모리는 delete 연산자를 사용하여 해제 할 수 있습니다. 새 연산자는 함수가 아니라 연산자이므로 실행 시간을 줄입니다.

malloc ()의 정의

malloc () 은 요청 된 메모리 양을 힙에 할당하는 데 사용되는 함수입니다. 이 메소드는 'void'타입의 포인터를 반환하며, 이 타입은 지정된 타입의 메모리에 대한 포인터를 얻기 위해 타입 캐스트 (cast)된다. 그리고 메모리에 대한이 포인터는 참조 변수에 할당된다. malloc () 함수는 메모리를 동적으로 할당하는 데 사용되는 C ++의 new 연산자와 비슷합니다. malloc ()은 표준 라이브러리 함수입니다. malloc () 함수의 구문은 다음과 같습니다.

 variable_name = (타입 *) malloc (sizeof (타입)); 

여기서 "type"은 메모리를 할당해야하는 변수의 데이터 유형을 나타냅니다. variable_name은 malloc ()에 의해 반환 된 포인터가 할당 될 참조 변수의 이름입니다. (type *)은 특정 유형의 메모리에 대한 포인터를 얻기 위해 유형 변환을 설명합니다. sizeof ()는 malloc ()에 필요한 메모리 크기를 설명합니다.

malloc ()은 malloc ()에 의해 반환 된 포인터가 void 타입이기 때문에 타입 캐스팅이 필요합니다. 따라서 포인터에 타입을 할당하려면 타입 캐스팅이 필요합니다. sizeof () 함수는 malloc () 함수가 원시 메모리를 할당하므로 malloc () 함수에 할당해야하는 메모리 크기를 알려줘야하기 때문에 sizeof ()가 필요합니다. 할당 된 메모리가 충분하지 않은 경우 realloc ()을 사용하여 크기를 조정하거나 다시 할당 할 수 있습니다.

malloc () 함수는 힙에 메모리를 할당합니다. 힙이 메모리 부족한 경우 malloc () 함수는 NULL 포인터를 반환합니다. 따라서 malloc ()에 의해 반환 된 포인터를 포함하는 참조 변수는 사용되기 전에 검사되어야합니다. 그렇지 않으면 시스템 충돌이 발생할 수 있습니다.

malloc () 함수에 의해 할당 된 메모리는 free ()를 사용하여 할당 해제됩니다. 함수 호출로 인해 오버 헤드가 발생하므로 malloc ()은 실행에 더 많은 시간이 필요합니다.

new와 malloc () 사이의 주요 차이점

  1. new 연산자는 C ++에서 도입되고 Java, C # 등에서 사용되는 구조입니다. 반면에 malloc ()은 C 언어로만 발견되고 C ++에서 지원하는 표준 라이브러리 함수입니다.
  2. new 연산자는 지정된 유형의 객체에 충분한 메모리를 할당하므로 크기 조정 연산자가 필요하지 않습니다. 반면에 malloc () 함수는 sizeof () 연산자를 사용하여 함수가 할당해야하는 메모리 크기를 알 수 있도록합니다.
  3. new 연산자는 선언하는 동안 객체의 생성자를 호출 할 수 있습니다. 반면에 malloc () 함수는 생성자를 호출 할 수 없습니다.
  4. 'new'연산자는 오버로드 될 수 있지만 malloc ()은 할 수 없습니다.
  5. new 연산자가 메모리 할당에 실패하면 프로그램이 종료 할 코드에 의해 처리되어야하는 예외가 발생합니다. 반면, malloc () 함수는 메모리 할당에 실패하면 NULL 포인터를 반환합니다. 이를 확인하지 않고 포인터를 사용하면 시스템 충돌이 발생합니다.
  6. new 연산자를 사용하여 할당 된 메모리는 'delete'를 사용하여 할당 해제 할 수 있습니다. 반면, malloc () 함수를 사용하여 할당 된 메모리는 free ()를 사용하여 할당 해제 될 수 있습니다.
  7. 메모리가 새 연산자를 사용하여 할당되면 어쨌든 크기를 조정할 수 없습니다. 반면에 malloc () 함수를 사용하여 할당 된 메모리는 realloc () 함수를 사용하여 재 할당 (크기 변경) 될 수 있습니다.
  8. new의 실행 시간은 malloc ()과 비교하여 적습니다. malloc은 함수이고 new는 구조이기 때문입니다.

결론:

malloc () 함수는 메모리를 동적으로 할당하는 오래된 방법입니다. 요즘, new 연산자는 malloc ()보다 몇 가지 장점이 있기 때문에 런타임에 메모리를 할당하는 데 사용됩니다.

Top