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