第一个是什么;";代表“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
词源的官方来源


一些看似合理的候选人似乎是:

  • Count或counted,因为
    calloc
    采用单独的Count参数
  • 清除,因为它确保已清除返回的内存块

    • 据报道,布赖恩·克尼汉认为“c”代表清晰(尽管他承认自己不确定)
    • (参见注释。)在源代码注释中,early似乎包含对单词clear的明确引用(但没有对单词计数或任何其他候选词的引用)。在文件中的另一个源代码注释中,单词clear再次出现,与单词
      calloc
      有关
  • C、 就像在C语言中一样

    • (请参阅和注释。)可能是同时引入的一组函数的命名约定

  • 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字节块”,我也这么想