一个学生问了这个问题,我也不确定。
猜测包括:“计数”、“清除”、“分块”、“完成”……
标准库文档没有说明它代表什么,也没有类似命名的函数来指示模式。有谁知道实际的词源并且也许有权威的参考资料来支持它?
我做了一些研究,在“UNIX@分时系统”中发现了以下内容: UNIX 程序员手册。第七版,第 2 卷”,“编程”一章(我用斜体字):
char *malloc(num);
分配
字节。返回的指针已充分对齐,可用于任何目的。如果没有可用空间,则返回num
。NULL
char *calloc(num, size);
为每个
大小的num
项分配空间。空间保证设置为 0,并且指针充分对齐以可用于任何目的。如果没有可用空间,则返回size
。NULL
cfree(ptr) char *ptr;
空间返回到
使用的池中。 如果未从calloc
获取指针,则可能会出现混乱。calloc
最后一句话是一个明确的证据,表明
calloc()
绝对是(应该是?)与malloc()
有更多不同,然后只是通过清除记忆来实现。
有趣的是,这几百页中没有任何提及
free()
......:-)calloc()
,它调用 alloc()
。 (链接的)源代码没有显示任何将任何内存归零的方法。从上述两个事实得出结论,我强烈反对
calloc()
中的前导“c”代表“clear”的理论。
我想没有人知道。但是,使用必须清除内存的语义来描述 calloc() 调用,而不是返回先前 free() 操作留下的任何随机垃圾的 malloc(内存分配),是一种有用的操作方式学生们,这很有用,因为它提醒用户 malloc() 返回一个不安全的值。
calloc
= 连续内存分配。
这意味着根据
calloc()
的语法,即
void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);
它接收两个参数:否。块的数量和一个块的大小,因此它为第 1 个块分配了一个内存数组。您将提供的块数。
正如Anant的回答所说,它代表连续分配。佩
maloe 将根据需要向操作系统请求空间,而不是从编译的固定大小数组中分配。由于程序中的其他活动也可能在不调用此分配器的情况下请求空间,因此 malloe 管理的空间可能不是连续的。因此,它的空闲存储被保存为空闲块列表。每个块包含一个大小、一个指向下一个块的指针以及空间本身。这些块按照存储地址递增的顺序保存,并且 最后一个块(最高地址)指向第一个块。
《C 编程语言》第 8.7 节,K&R,第 2 版。
。 如果这意味着要分配
明确多少内存,那就有意义了。 Malloc 意味着内存分配,它需要要分配的字节数作为参数。如果 calloc 意味着清除内存分配,那就有意义了,因为它要求您输入要分配的元素数量以及这些元素的字节大小。