9

の後に。が続くcalloc()よりも好ましいかどうか疑問に思いました。後者は、メモリを割り当てて初期化する最も一般的な方法のようです。mallocmemset

githubコード検索では、多くのテストと実装が見つかりますcallocが、最初のページ数では、実際にを使用しているコードはありませんcalloc

使用または使用を推奨するプロジェクト/組織、およびそれを推奨callocする状況を知っている人はいますか?

以下のコメントと回答から、これまでに浮かび上がってきたいくつかの考えを以下に示します。

  • calloc(n, size)で可能なオーバーフローを防ぐことができますmalloc(n * size)

  • mallocmemsetを組み合わせると、 callocはすでにゼロになっていることがわかっているページを要求する機会が与えられます。

  • callocの欠点は、組み合わせた手順によって、mallocの周りの他のラッパーが除外される可能性があることです。

4

1 に答える 1

15

ええと、私callocはかなりのCコードを使用しているので、それが答えだと思います。少し変わった呼び出し方法(要素の数と要素のサイズ)が人を投げる可能性があると思います。ただし、期待するほど多くの呼び出しが表示されないもう1つの理由は、大規模なプロジェクトの多くが、メモリ割り当ての失敗時にエラー処理(通常はプログラムの終了)を行う、、、およびフレンドのmallocラッパーを使用することです。callocしたがって、実際のコードはxcalloc代わりに使用します。

プラスを使用callocする理由の1つは、より効率的である可能性があることです。Cライブラリがページがゼロ化されていることをすでに知っている場合(おそらくOSから新しいゼロ化されたメモリを取得したばかり)、明示的にゼロ化する必要はありません。mallocmemsetcalloc

于 2013-03-18T00:53:40.657 に答える