第一个“C”在“calloc”中代表什么?
一个学生问这个问题,我不知道。
猜测包括:“计数”,“清除”,“分块”,“完整”,…
标准库文档没有说明它的含义,也没有类似的命名函数来指示模式。 有谁知道实际的词源,也许有一个权威的参考来支持它?
根据“ Linux系统编程” (罗伯特·洛夫)一书的摘录, calloc
的词源中没有官方消息来源。
一些似是而非的候选人似乎是:
- 计数或计数 ,因为
calloc
需要一个单独的计数参数。 -
清除 ,因为它确保返回的内存块已被清除。
- 据报道,Brian Kernighan认为“c”代表明确 (尽pipe他承认他不确定)。
- (请参阅注释。)早期的
calloc.c
似乎在源代码注释中明确提及“ 清除 ”一词(但没有提及单词计数或任何其他候选)。 在文件malloc.c
中的另一个源代码注释中, clear一词又出现在calloc
这个词的引用中。
-
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分配一个内存数组。 你会提供的块。