【问题标题】:Shrinking with realloc使用 realloc 收缩
【发布时间】:2011-04-16 21:08:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c dynamic-memory-allocation realloc


    【解决方案1】:

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

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

    【讨论】:

    • 为了消除任何疑问,我实际上在 iOS 6 上遇到过这种情况,其中 40K 到 224 字节的重新分配实际上会将内存移动到新位置。
    猜你喜欢
    • 2017-04-12
    • 2016-08-22
    • 2020-12-18
    • 2016-04-09
    • 2011-11-20
    • 2021-12-30
    • 2016-07-04
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多