realloc如何处理使用calloc分配的内存?

Div*_*vya 1 c malloc realloc calloc dynamic-memory-allocation

当我们尝试调整malloc使用分配的内存大小时realloc,我们通常会这样做:

char *ptr = (char *)malloc(size_1);
ptr = (char *)realloc(ptr, size_2);
Run Code Online (Sandbox Code Playgroud)

如果size_2可能大于或小于size_1.如果新大小较大,则旧数据不会丢失,新分配的字节未初始化.ptr如果旧地址处没有足够的内存来连续存储所有字节,则包含的起始地址可能会改变.realloc将旧块的内容移动到新块中,并ptr指向该新块的初始字节.

但是,如果使用分配内存calloc,我无法理解realloc函数的行为方式.有人可以给我一个关于如何realloc分配内存的工作的简要概述calloc吗?

AnT*_*AnT 8

我们知道malloc和calloc的内存块布局是不同的.

不,我们没有.实际上,我们知道除了calloc()负责将其参数相乘(确定块大小)并确保分配的块用全零位模式初始化之外,根本没有区别.

其余的如下.realloc()无论使用什么功能来分配内存块,内存块的处理方式都没有区别.realloc()处理calloced块的方式与处理malloc()ed块的方式完全相同.

  • 使用`calloc()`,你得到一个单独的内存块,就像你使用`malloc()`一样,就像你使用`realloc()`一样. (2认同)