当我们尝试使用 realloc
调整 malloc
分配的内存时,我们通常会这样做:
char *ptr = (char *)malloc(size_1);
ptr = (char *)realloc(ptr, size_2);
如果 size_2
可能大于或小于 size_1
. 如果新大小较大,则旧数据不会丢失,并且新分配的字节未初始化 . 如果旧地址没有足够的内存来连续存储所有字节, ptr
包含的起始地址可能会改变 . realloc
将旧块的内容移动到新块中, ptr
将指向此新块的初始字节 .
但是,如果使用 calloc
分配内存,我无法理解 realloc
函数的行为 . 有人可以给我一个关于 realloc
如何在 calloc
分配的内存上工作的简要概述?
3 回答
不,除了
calloc()
负责将其参数相乘(以确定块大小)并确保使用全零位模式初始化分配的块之外,我们完全没有区别 .其余的如下 . 无论使用什么函数来分配内存块,
realloc()
如何处理内存块都没有区别 .realloc()
处理calloc
ed块的方式与处理malloc()
ed块的方式完全相同 .实际上没有.
calloc
和malloc
之间的区别是 -而
以及参与其中的论点数量 .
而且我认为
realloc
不会以malloc
或calloc
分配的内存 .编辑
关于你的问题 -
这将按预期工作 .
不,它是一样的 . 这种说法没有根据 .
char *ptr=(char *)malloc(size_1); ptr=(char *)realloc(ptr, size_2);
正确 .
如有必要 . 如果块仅仅生长,则不需要该步骤 .
正确 .
相同 .
这是相同的 .
你是在思考这个问题 .
calloc(n, size)
可以实现,只有malloc(n*size)
后跟memset()
.realloc()
不在乎 .