realloc和malloc函数

看代码:

#include<stdio.h>


 #include<stdlib.h>
void main()
{
  int *p;
  p = malloc(6);
  p = realloc(p, 10);
  if (p == NULL)
  {
    printf("error");
   exit(1);
   }
}

以代码示例为例,假设总内存为10个字节,其中2个字节用于指向int类型的指针,另外6字节由malloc函数使用,其余2个字节被其他程序占用,现在当我运行realloc函数时为了扩展指针所指向的内存,它将搜索内存中的10个字节,当它不可用时,它会从堆区分配10个字节的内存并复制malloc的内容并将其粘贴到堆区中新分配的内存区域中然后删除存储在malloc中的内存吧?

realloc()是否返回空指针,因为内存不可用? 无权利!? 它确实去堆区分配内存的权利? 它不会返回一个空指针吗?


正确 - 如果realloc无法调整传入的内存块的大小,它将创建一个新的内存块,复制数据并释放旧内存块。

然而:

  • malloc实现通常不以字节粒度进行操作。 大多数我看到的所有内容都是最接近的16个字节,因为它使会计更容易,许多用户无论如何都需要这种对齐。 在你的情况下,这将最终使realloc成为空操作,因为两个大小最多为16个字节。

  • 在大多数常见的多任务操作系统中,应用程序可以访问的唯一内存是它自己的 - 其他应用程序的内存不会妨碍您的使用。 但是,由库或其他线程分配的内存也许会。


  • 正如realloc规范所述:

    如果内存对象的新大小需要对象的移动,则释放对象的先前实例化的空间。

    链接地址: http://www.djcxy.com/p/28457.html

    上一篇: realloc and malloc functions

    下一篇: Malloc or Calloc and when