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