重複の可能性:
mallocとcallocのcの違い
callocよりmallocを好む状況はありますか?私は、mallocとcallocの両方がメモリを動的に割り当て、callocも割り当てられたメモリのすべてのビットをゼロに初期化することを知っています。このことから、mallocよりもcallocを使用する方が常に良いと思います。または、mallocの方が優れている状況はありますか?パフォーマンスは?
重複の可能性:
mallocとcallocのcの違い
callocよりmallocを好む状況はありますか?私は、mallocとcallocの両方がメモリを動的に割り当て、callocも割り当てられたメモリのすべてのビットをゼロに初期化することを知っています。このことから、mallocよりもcallocを使用する方が常に良いと思います。または、mallocの方が優れている状況はありますか?パフォーマンスは?
動的に割り当てられたメモリをゼロで初期化する必要がある場合は、を使用しますcalloc
。
動的に割り当てられたメモリをゼロで初期化する必要がない場合は、を使用しますmalloc
。
常にゼロで初期化されたメモリが必要なわけではありません。ゼロ初期化されたメモリが必要ない場合は、初期化のコストを支払わないでください。たとえば、メモリを割り当てた後、すぐにデータをコピーして割り当てられたメモリを埋める場合、ゼロ初期化を実行する理由はまったくありません。
calloc
とmalloc
はさまざまなことを行う関数です。実行する必要のあるタスクに最も適切なものを使用してください。
注意しないと、callocのゼロ初期化に依存することは危険な場合があります。予想どおり、メモリをゼロにすると、整数型の場合は0、文字型の場合は\0になります。ただし、必ずしもfloat /double0またはNULLポインターに対応するわけではありません。
通常、そこに何かを保存するという特定の目的でメモリを割り当てています。つまり、(少なくともほとんどの)によってゼロで初期化されたスペースは、calloc
すぐに他の値で上書きされます。そのため、ほとんどのコードはmalloc
、実際の損失なしに少し余分な速度を使用します。
私が見たほとんど唯一の使用法はcalloc
、C ++と比較したJavaの速度を(おそらく)ベンチマークしたコードでした。C ++バージョンでは、メモリを割り当ててから、Javaに有利な結果を生成するためのかなり透過的な試みで、メモリを再度初期化するためにcalloc
使用されました。memset