51

学生が質問したのですが、よくわかりませんでした。

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

標準ライブラリのドキュメントには、それが何を表しているかは記載されておらず、パターンを示す同様の名前の関数はありません。誰かが実際の語源を知っていて、おそらくそれをバックアップするための信頼できる参照を持っていますか?

4

5 に答える 5

9

いくつかの調査を行ったところ、「UNIX@ TIME-SHARING SYSTEM: UNIX PROGRAMMER'S MANUAL. Seventh Edition, Volume 2」の「PROGRAMMING」の章( Italics by me )で次のことがわかりました。

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()which 呼び出しがありましたalloc()。(リンクされた)ソースは、メモリをゼロにするアプローチを示していません。

上記の両方の事実から結論を下すと、先頭の「c」がcalloc()「クリア」を表すという理論には強く反対します。

于 2015-08-09T16:09:28.383 に答える
3

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

calloc()ie の構文によると、それは意味します

void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);   

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

于 2015-08-08T03:52:57.113 に答える
3

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

于 2015-08-08T11:30:17.497 に答える