6

我在这个问题中遇到了一小段代码,想知道,

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

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

如果可能,在什么条件下,我可以期望b有一个不同于 in 的地址a

4

1 回答 1

12

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

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

于 2010-09-24T16:19:10.153 回答