c - 使用 realloc 缩小

标签 c dynamic-memory-allocation realloc

我在this question遇到了这段小代码, & 想知道,

当指向的内存空间缩小时,realloc() 函数能否将内存块移动到另一个位置?

int * a = malloc( 10*sizeof(int) );
int * b = realloc( a, 5*sizeof(int) );

如果可能,在什么条件下,我可以期望 b 的地址与 a 中的地址不同?

最佳答案

realloc 可以在任何调用中移动内存。在许多实现中确实如此,收缩只会导致堆中保留大小的变化而不会移动内存。然而,在针对低碎片进行优化的堆中,它可能会选择将内存移动到更合适的位置。

不要依赖于 realloc 将内存保持在同一位置以进行任何操作。

关于c - 使用 realloc 缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788966/

相关文章:

c - realloc() 突然中止 C 程序

将 char 整数表示形式转换为二进制

c - 为什么我在哈希表中得到相同的值?

c - 如何编码内存图?

java - 当使用 new-operator 调用堆中的 Class() 进行多次调用时会发生什么?

c - 调用 realloc() 之前释放内存

c - realloc 给出错误 - 下一个大小无效

c - 使用指针 c 反转数组

c - 将数组参数传递给函数

c - 用C读取和写入二进制文件