我知道以下情况:

  • malloc
  • calloc
  • 重新分配

  • 这些之间有什么区别?为什么malloc似乎几乎只被使用?编译器之间在行为上有区别吗?

    最佳答案

    malloc分配内存。内存中的内容保持原样(填充之前的内容)。
    calloc分配内存并将其内容设置为全零。
    realloc更改现有分配的内存块的大小,或将现有内存块的内容复制到请求大小的新分配的块中,然后解除分配旧块。

    显然,realloc是一种特殊情况。如果您没有旧的内存块来调整大小(或复制和取消分配),则没有理由使用它。通常使用malloc而不是calloc的原因是,将内存设置为全零会产生运行时开销,并且如果您打算立即用有用的数据填充内存(很常见),那是没有意义的首先将其清零。

    这些功能都是标准功能,可在编译器之间可靠地运行。

    关于c - 在C中分配内存的所有方式有哪些?它们有何不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3791294/

    10-16 20:46