第一个“C”在“calloc”中代表什么?

一个学生问这个问题,我不知道。

猜测包括:“计数”,“清除”,“分块”,“完整”,…

标准库文档没有说明它的含义,也没有类似的命名函数来指示模式。 有谁知道实际的词源,也许有一个权威的参考来支持它?

根据“ Linux系统编程” (罗伯特·洛夫)一书的摘录, calloc的词源中没有官方消息来源。


一些似是而非的候选人似乎是:

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

    • 据报道,Brian Kernighan认为“c”代表明确 (尽pipe他承认他不确定)。
    • (请参阅注释。)早期的calloc.c似乎在源代码注释中明确提及“ 清除 ”一词(但没有提及单词计数或任何其他候选)。 在文件malloc.c中的另一个源代码注释中, clear一词又出现在calloc这个词的引用中。
  3. C ,就像C语言一样。

    • (请参阅alk的回答和评论。)可能是大约在同一时间推出的一组函数的命名约定。

我做了一些研究,在“UNIX @ TIME-SHARING SYSTEM:UNIX程序员手册第七版,第二卷”中的“PROGRAMMING”一章 ( 斜体 )中find了以下内容:

 char *malloc(num); 

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

 char *calloc(num, size); 

为每个size大小的num项目分配空间。 该空间保证被设置为0,并且该指针被充分alignment以用于任何目的。 如果没有空间可用,则返回NULL

  cfree(ptr) char *ptr; 

空间返回到由calloc使用的池。 如果指针不是从calloc获得的话,可能会出现障碍

  • 最后一句话是一个明确的证据, calloc()肯定(意味着?)与malloc() 更加不同 ,然后清除内存。

    有趣的是,没有任何提及free()在这些几百页… 🙂

  • 而且UNIX V6已经有调用alloc() calloc() alloc() 。 (链接)源不显示任何方法来零任何内存。

从上述两个事实得出结论,我强烈反对calloc()中的主要“c”代表“明确”的理论。

我不认为有人知道。 但是使用内存必须清除的语义来描述calloc()调用,而不是返回从前一个free()操作中遗留的随机垃圾的malloc(内存分配),这对于学生来说是一个有用的工作方法 ,这是有用的,它提醒用户malloc()返回一个不安全的值。

calloc =连续内存分配。

这意味着根据calloc()语法即

 void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes); 

它接收两个参数:不。 块和一个块的大小,所以它为no分配一个内存数组。 你会提供的块。