문제

복제 : Malloc vs New를 사용하는 경우에는 어떤 경우가 있습니까?

이 질문을 다시 읽으십시오.
C ++에서 "New"와 "Malloc"과 "Calloc"의 차이점은 무엇입니까?

답을 확인했지만 아무도 질문에 대답하지 않았습니다.

  • 새 대신 Malloc을 언제 사용합니까?

몇 가지 이유가 있습니다 (두 가지를 생각할 수 있습니다).
최고의 부유물을 정상에 두십시오.

도움이 되었습니까?

해결책

봄에 떠오르는 부부 :

  • C ++와 C 사이에 코드를 휴대하기 위해 코드가 필요할 때
  • C에서 호출 될 수있는 라이브러리에 메모리를 할당 할 때 C 코드는 할당을 제거해야합니다.

다른 팁

Stroustrup FAQ에서 new/malloc 그 스레드에 게시했습니다.

Malloc ()를 사용할 때마다 리턴 포인터를 적절한 유형으로 초기화 및 변환을 고려해야합니다. 또한 사용하기에 바이트 수를 얻은 경우 고려해야합니다. Malloc ()과 초기화를 고려할 때 새로운 성능 차이는 없습니다.

이것은 당신의 질문에 답해야합니다.

C ++에서 Malloc을 사용하는 것이 가장 좋은 이유는 순수한 C API와 상호 작용할 때입니다. 내가 일한 일부 C API는 특정 매개 변수의 메모리를 소유하고 있습니다. 따라서 그들은 메모리를 제거 할 책임이 있으므로 메모리는 무료를 통해 자유롭게 할 수 있어야합니다. Malloc은이 puprose에서 작동하지만 반드시 새로운 것은 아닙니다.

C ++에서는 절대 절대. New는 일반적으로 Malloc 주변의 포장지로서 생성자를 호출합니다 (해당되는 경우).

그러나 적어도 Visual C ++ 2005 이상에서는 Malloc을 사용하면 실제로 신규 보안 취약점이 생길 수 있습니다..

이 코드를 고려하십시오.

MyStruct* p = new MyStruct[count];
MyStruct* p = (MyStruct*)malloc(count* sizeof(MyStruct));

그들은 동등하게 보입니다. 그러나 첫 번째 Codegen은 실제로 정수 오버플로를 확인합니다. count * sizeof(MyStruct). 카운트가 신뢰할 수없는 소스에서 나오면 정수 오버플로가 발생하여 소량의 메모리가 할당 될 수 있지만 Count를 사용하면 버퍼를 오버런합니다.

모두가 Free ()를 사용하는 C 라이브러리를 사용할 때 (약간 다른 단어를 사용) 언급했으며 주변에 많은 사람들이 있습니다.

내가 보는 다른 상황은 다음과 같습니다.

자신의 메모리 관리를 재치 할 때 (어떤 이유로 든 기본값을 모델링하여 발견 한 것만으로는 충분하지 않기 때문에). Malloc과 함께 메모리 블록을 할당 할 수 있으며 새 배치를 사용하여 수영장 내의 객체를 초기화 할 수 있습니다.

그 이유 중 하나는 C ++에서 새 연산자에게 과부하를 줄 수 있기 때문입니다.

코드에서 시스템 라이브러리 메모리 할당을 사용하려면 Malloc을 사용할 수 있습니다.

C ++ 프로그래머는 Malloc에게 전화 해야하는 경우 거의 없어야합니다. 내가 생각할 수있는 유일한 이유는 제대로 구성되지 않은 API 일 것입니다. 자신의 코드에서는 새로운 것이 항상 Malloc과 동등해야합니다.

메모리가 Free () (귀하 또는 누군가 Elses 코드에서)에 의해 해제되는 경우 Malloc을 사용해야합니다.

그렇지 않으면 확실하지 않습니다. 한 가지 사례 중 하나는 소멸자가 출구에서 실행되기를 원하지 않는 경우이지만,이 경우 어쨌든 no-op dtor가있는 객체가 있어야합니다.

예외를 포착하는 것에 대해 걱정하지 않아도되거나 새로운 버전의 새로운 버전을 사용하는 경우 Malloc을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top