web-dev-qa-db-ja.com

最初の「c」は「calloc」で何を表していますか?

学生が質問をしました、そして私は確かに知りませんでした。

推測には、「カウント」、「クリア」、「チャンク」、「完全」などがあります。

標準ライブラリのドキュメントはそれが何を意味するのかを述べておらず、パターンを示す類似した名前の関数はありません。誰かが実際の語源を知っていて、おそらくそれを裏付ける信頼できる参照がありますか?

44

本の抜粋 Linux System Programming (Robert Love作)によると、callocの語源に関する公式の情報源はありません。


一部のもっともらしい候補は次のようです:

  1. Countまたはcountedcallocは個別のカウント引数を取るためです。
  2. Clear、これにより、返されたメモリチャンクが確実にクリアされます。

    • ブライアンカーニガンは、「c」がclearの略であると信じていると報告されています(ただし、彼は確信が持てないと認めています)。
    • (コメントを参照してください。)初期の calloc.c は、ソースコードコメントにWordへの明示的な参照clearが含まれているようです(ただし、Wordへの参照countまたは他の候補者に)。ファイル内の別のソースコードコメント malloc.c 、Wordのcallocを参照して、Wordclearが再び表示されます。
  3. [〜#〜] c [〜#〜](C言語の場合と同様)。

    • (- アルクの答え とコメントを参照してください。)おそらく、ほぼ同時に導入された一連の関数の命名規則。

私はいくつかの調査を行い、以下を "UNIX @タイムシェアリングシステム:UNIXプログラマーズマニュアル。第7版、第2巻"、「プログラミング」の章イタリック体):

char *malloc(num);

numバイトを割り当てます。返されたポインタは、あらゆる目的に使用できるように十分に調整されています。 NULLは、使用可能なスペースがない場合に返されます。

char *calloc(num, size);

numアイテムそれぞれにsizeサイズのスペースを割り当てます。スペースは0に設定されていることが保証されており、ポインタは、あらゆる目的に使用できるように十分に調整されています。 NULLは、使用可能なスペースがない場合に返されます。

 cfree(ptr) char *ptr;

callocが使用するプールにスペースが返されます。 ポインタがcallocから取得されなかった場合、障害が発生する可能性があります。

  • 最後の文は、calloc()が間違いなく(意味があるのか​​)malloc()とは異なることを明確に示しています。 。

    興味深いことに、これらの数百のページのいずれにもfree()への参照はありません... :-)

  • さらに、UNIX V6にはすでに calloc() があり、これが alloc() を呼び出します。 (リンクされた)ソースには、メモリをゼロにする方法は示されていません。

上記の両方の事実から結論づけると、calloc()の先頭の「c」は「明確」を表すという理論に強く反対します。

8
alk

誰も知らないと思います。しかし、以前のfree()操作で残ったランダムなゴミを返すmalloc(メモリ割り当て)とは対照的に、メモリをクリアする必要があるというセマンティクスでcalloc()呼び出しを説明すると便利ですmodus operandi学生用。これは、malloc()が安全でない値を返すことをユーザーに思い出させるのに役立ちます。

3
jrrk

calloc =連続したメモリ割り当て。

これは、calloc()の構文に従って、つまり

void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);   

2つのパラメーターを受け取ります。ブロックの数と1つのブロックのサイズのため、メモリ配列をnoに割り当てます。あなたが提供するブロックの。

1
Anant Barthwal