私はmallocとnewの違いについていくつかの投稿を見てきましたが、それは理解しています。
ただし、これらの投稿はいずれもパフォーマンスについて説明していないため、これら2つの間にパフォーマンスの違いがあるのか、それともコンパイラーが本質的に同じことを行うのか疑問に思いました。
比較のために、ここでプリミティブ型について話していると仮定しましょう(Hans Passantに感謝します)。
前もって感謝します。
私はmallocとnewの違いについていくつかの投稿を見てきましたが、それは理解しています。
ただし、これらの投稿はいずれもパフォーマンスについて説明していないため、これら2つの間にパフォーマンスの違いがあるのか、それともコンパイラーが本質的に同じことを行うのか疑問に思いました。
比較のために、ここでプリミティブ型について話していると仮定しましょう(Hans Passantに感謝します)。
前もって感謝します。
malloc()
おそらくandfree()
とoperator new()
and (およびそれらの配列形式)を比較したいと思うでしょうoperator delete()
:これは、オブジェクトの構築とは無関係にメモリが割り当てられる方法です。パフォーマンスは非常に似ている可能性が高く、両方のアプローチで同じメモリプールを使用する可能性が非常に高くなります。C++演算子は薄いラップピアである可能性があります(malloc()
ただし、その逆ではありfree()
ません。ユーザーは安全に実装できます。と)。operator new()
operator delete()
malloc()
free()
実際のパフォーマンスを判断するには、明らかに2つのアプローチを合理的な方法でプロファイリングする必要があります。そうしなければ、ほとんどのシステムで大きな違いは期待できません。もちろん、結果はさまざまなシステムに固有のものになります。
確認する唯一の方法は、コンパイラのさまざまなオプションの時間を計ることです。すべてのコンパイラに適用される厳格なルールはありません。
int
またはの配列を割り当てることについて話している場合double
、たとえば、適切な実装では、パフォーマンスの違いを検出できないはずです。
答えは特定のコンパイラによって異なりますが、newのほとんどの実装は、単にmallocを内部で呼び出すだけだと思います。mallocは、追加のコードを呼び出さないため、通常はわずかに高速になります(オブジェクトのコンストラクターを呼び出すnewとは異なります)。