第一个"c"在"calloc"中代表什么?

Ray*_*ger 44 c malloc libc calloc c-standard-library

一名学生问了这个问题,我不确定.

猜测包括:"计数","清算","分块","完整",......

标准库文档没有说明它代表什么,并且没有类似命名的函数来指示模式.有没有人知道实际的词源,也许有一个权威的参考来支持它?

The*_*kis 53

根据Linux系统编程(Robert Love)一书的摘录,没有关于词源的官方消息来源calloc.


一些看似合理的候选人似乎是:

  1. 计数计数,因为calloc需要一个单独的计数参数.
  2. 清除,因为它确保已清除返回的内存块.

    • 据报道Brian Kernighan认为"c"代表清楚(尽管他承认他不确定).
    • (参见注释.)早期calloc.c似乎包含对源代码注释中的单词clear的明确引用(但没有引用单词count或任何其他候选者).在文件中的另一个源代码注释中malloc.c,单词clear将再次出现,引用该单词calloc.
  3. C,如C语言.

    • (参见alk的回答和评论.)可能是几乎同时引入的一组函数的命名约定.

  • V7(将'malloc()`和`calloc()`添加到Unix中的版本)源代码[在评论中使用clear](https://github.com/dspinellis/unix-history-repo/blob/Research -V7/usr/src/libc/gen/calloc.c)并实际清除分配的内存块. (20认同)
  • 那么,`cfree()`中的`c`是什么?:-S (5认同)
  • @alk:哦!有趣的是它没有清除内存(至少是明确的).更有趣的是,它不是唯一以`c`开头的函数.也许`c`代表C(编程语言),因为已经使用了`open`或`alloc`.请参阅Lesk的[可移植C库(在UNIX上)](http://www.tom-yam.or.jp/2238/ref/iolib.pdf),这似乎是关于这个`iolib`的文档(不是100%匹配V6一个). (3认同)
  • @cremno哇,这是一个非常有用的参考资料库.它可能让我们尽可能接近答案.我编辑了答案以包含您的链接. (2认同)
  • @cremno如果你觉得你已经找到了足够的线索来引用C语言本身的"c",我可以建议你做出答案吗?(对我而言,这听起来就像现在最有说服力的词源.) (2认同)

alk*_*alk 8

我做了一些研究,并在"UNIX @ TIME-SHARING SYSTEM:UNIX PROGRAMMER'S MANUAL .Seventh Edition,Volume 2","PROGRAMMING"一章(我的斜体)中找到了以下内容:

char *malloc(num);
Run Code Online (Sandbox Code Playgroud)

分配num字节.返回的指针足够对齐,可用于任何目的.NULL如果没有可用空间,则返回

char *calloc(num, size);
Run Code Online (Sandbox Code Playgroud)

num每个size大小的项目分配空间.保证空间设置为0并且指针足够对齐以便可用于任何目的.NULL如果没有可用空间,则返回

 cfree(ptr) char *ptr;
Run Code Online (Sandbox Code Playgroud)

空间返回到使用的池calloc.如果未从中获取指针,则可以预期失序calloc.

  • 最后一句话是一个明确的证据,calloc()肯定(意味着?)与此仅仅通过清除记忆更加不同malloc().

    有趣的是,没有任何参考free()这几百页的任何一个...... :-)

  • 而且UNIX V6已经有calloc()哪些调用alloc().(链接)源不显示任何将任何内存清零的方法.

从上述两个事实得出结论,我强烈反对这样一种理论,即领先的"c" calloc()代表"明确".