C语言 realloc and malloc functions



查看代码:

#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个字节,malloc函数声明int类型的指针使用了2个字节,ohter使用了6个字节,剩下的2个字节被其他程序占用,现在当我运行realloc函数来扩展指针指向的内存时,它将在内存中搜索10个字节,当它不可用时,它从堆区域分配10个字节的内存,复制malloc的内容并将其粘贴到堆区域中新分配的内存区域,然后删除存储在malloc中的内存,对吗?

realloc()是否因为内存不可用而返回NULL指针?不对!?它确实为内存分配到堆区了吗?它不返回NULL指针,对吗?

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

但是:

  1. CCD_ 2实现通常不在字节粒度上操作。我见过的大多数都将所有内容四舍五入到最接近的16字节,因为这使得记账更容易,而且许多用户无论如何都需要这种对齐。在您的情况下,这最终会使realloc成为一个无操作,因为两个大小都四舍五入到16字节。

  2. 在大多数常见的多任务操作系统中,应用程序唯一可访问的内存是它自己的——其他应用程序的内存永远不会妨碍你。不过,库或其他线程可能会分配内存。

如realloc:规范中所述

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

相关内容

  • 没有找到相关文章