2012-12-30 2 views
2

malloc과 new 사이의 차이점을 couple of posts으로 확인했습니다.C++에서 malloc과 new 사이에 성능 차이가 있습니까?

그러나 성능에 대해 언급 한 게시물이 없으므로 컴파일러가 본질적으로 동일한 작업을 수행 할 경우 성능 차이가 있는지 궁금합니다.

비교를 위해 여기에 기본 유형에 대해 이야기하고 있다고 가정 해 보겠습니다. 한스 패 탄트 감사합니다.

미리 감사드립니다.

+0

음, malloc()은 생성자를 호출하지 않습니다. 합리적인 비교를 어떻게 기대합니까? –

+0

참. 기본 유형을 비교해 보겠습니다. 그게 더 합리적일까요? – OneMore

+0

질문에서 명확하게 작성해야합니다. 코멘트에 넣는 것만으로는 충분하지 않습니다. –

답변

8

당신은 아마 operator new()operator delete() (및 배열 형태)로 malloc()free()을 비교할 것 : 이것은 메모리가 객체의 구조에서 독립적으로 할당하는 방법입니다. C++ 연산자는 malloc()free()과 같은 얇은 래퍼가 될 수 있습니다 (다른 방법은 없습니다. 사용자가 operator new()을 안전하게 구현할 수 있습니다.) malloc()free()으로 환산하여 operator delete() 인 것으로 가정한다.

실제 성능을 확인하려면 두 방법을 합리적인 방법으로 프로파일 링해야합니다. Withouth는 이렇게 했으므로 대부분의 시스템에서 많은 차이를 기대하지는 않습니다. 물론 그 결과는 다른 시스템에 따라 달라질 것입니다.

3

유일한 방법은 컴파일러의 다양한 옵션을 시간을 측정하는 것입니다. 모든 컴파일러에 적용되는 어렵고 빠른 규칙은 없습니다.

int 또는 double의 배열을 할당하는 경우, 적절한 구현을 위해 성능 차이를 감지 할 수 없어야합니다.

3

대답은 특정 컴파일러에 따라 달라질 수 있지만 새로운 구현의 대부분은 malloc을 간단히 호출한다고 생각합니다. malloc은 일반적으로 객체의 생성자를 호출하는 new와 달리 추가 코드를 호출하지 않기 때문에 약간 빠릅니다.

+1

생성자가 실제로 CPU를 많이 사용하는 경우 malloc은 훨씬 빨라졌습니다. 그러나 일반적으로 생성자에서 모든 것을 수행해야하는 이유가 있습니다. 그렇지 않은 경우에는 생성자가 아닌 다른 생성자를 추가 할 수 있습니다. 하지만 malloc은 POD 유형에만 사용되어야하며 객체에 대해서는 사용되지 않아야합니다. 왜냐하면 생성자가 일반적으로 이유가 있기 때문입니다. – Philipp

관련 문제