第一个是什么;";代表“in”;calloc";?
一个学生问了这个问题,我不确定 猜测包括:“计数”、“清除”、“分块”、“完成”第一个是什么;";代表“in”;calloc";?,c,malloc,libc,calloc,c-standard-library,C,Malloc,Libc,Calloc,C Standard Library,一个学生问了这个问题,我不确定 猜测包括:“计数”、“清除”、“分块”、“完成” 标准库文档没有说明它代表什么,也没有类似的命名函数来表示模式。有人知道实际的词源吗?也许有权威的参考来支持它吗?根据这本书的摘录(罗伯特·洛夫著),没有关于calloc词源的官方来源 一些看似合理的候选人似乎是: Count或counted,因为calloc采用单独的Count参数 清除,因为它确保已清除返回的内存块 据报道,布赖恩·克尼汉认为“c”代表清晰(尽管他承认自己不确定) (参见注释。)在源代码注释中
标准库文档没有说明它代表什么,也没有类似的命名函数来表示模式。有人知道实际的词源吗?也许有权威的参考来支持它吗?根据这本书的摘录(罗伯特·洛夫著),没有关于
calloc
词源的官方来源
一些看似合理的候选人似乎是:
calloc
采用单独的Count参数- 据报道,布赖恩·克尼汉认为“c”代表清晰(尽管他承认自己不确定)
- (参见注释。)在源代码注释中,early似乎包含对单词clear的明确引用(但没有对单词计数或任何其他候选词的引用)。在文件中的另一个源代码注释中,单词clear再次出现,与单词
有关李>calloc
- (请参阅和注释。)可能是同时引入的一组函数的命名约定
calloc
=连续内存分配
它的意思是根据calloc()
的语法,即
void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);
它接收两个参数:块的数量和一个块的大小,因此它为您将提供的块的数量分配一个内存数组。我想没有人知道。但是,用必须清除内存的语义描述calloc()调用,与malloc(内存分配)相反,malloc(内存分配)返回先前free()操作遗留的任何随机垃圾,这对于学生来说是一种有用的操作方式,因为它提醒用户malloc()返回不安全的值。我做了一些研究,在(我用斜体)中发现了以下内容: 分配
num
字节。返回的指针已充分对齐,可以用于任何目的<如果没有可用空间,则返回code>NULL
char *calloc(num, size);
cfree(ptr) char *ptr;
为每个size
size的num
项分配空间。保证将空间设置为0,指针充分对齐,可用于任何用途<如果没有可用空间,则返回code>NULL
char *calloc(num, size);
cfree(ptr) char *ptr;
空间返回到calloc
使用的池。如果指针不是从calloc
获取的,则可能会出现无序
- 最后一句话清楚地证明了
与calloc()
malloc() 有趣的是,在这几百页中没有任何一页提到了
。:-)free()
- 而且unixv6已经有了哪些调用。(链接的)源没有显示任何将内存归零的方法
从以上两个事实得出结论,我强烈反对
calloc()
中的前导“c”代表“clear”的理论 正如Anant的回答所说,它代表连续分配。
malloe将根据需要从操作系统请求空间,而不是从固定大小的编译数组中进行分配。由于程序中的其他活动也可能在不调用此分配器的情况下请求空间,因此malloe管理的空间可能不连续。因此,它的空闲存储被保存为空闲块列表。每个块都包含一个大小、指向下一个块的指针以及空间本身。这些块按存储地址增加的顺序保存,并且
最后一个块(最高地址)指向第一个
C编程语言的第8.7节,K&R,第2版。V7(在Unix中添加了
malloc()
和calloc()
的版本)源代码并实际清除了分配的内存块。@cremno哇,这是一个非常有用的参考存储库。这可能会让我们尽可能接近一个答案。我已经编辑了答案以包含您的链接。那么,为什么cfree()
中的c
-S@alk:噢!有趣的是,它没有清除内存(至少明确地)。更有趣的是,它不是唯一以c
开头的函数。也许c
只是代表c(编程语言),因为open
或alloc
已经被使用了。请参阅Lesk's,它似乎是一个关于此iolib
(虽然与V6不完全匹配)。@cremno如果您觉得您已经找到了足够的线索来解释c语言本身的“c”,我建议您给出一个答案?(对我来说,这听起来像是目前最令人信服的词源。)摘自man3 calloc
:void*calloc(size\t nmemb,size\t size)
-函数calloc()
为每个大小为字节的nmemb
元素数组分配内存,并返回指向分配内存的指针。内存设置为零。如果nmemb
或size为0,则calloc()
返回NULL或唯一指针值,该值可在以后成功传递给free()
。但是malloc
和realloc
也会分配一个连续的内存区域。用它与所有其他类似事物共享的属性来命名某事物是非常奇怪的。旧主题但对我来说是连续的,因为它连续分配给定大小的n个块,而malloc
和realloc
只分配给定大小的一个块。您可以将malloc(x)
理解为“分配x字节”,将calloc(n,x)
理解为“连续分配n个x字节块”,我也这么想