减少重新分配

Decreasing realloc

我有几个关于理解的问题 realloc 行为。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *str;

    /* Initial memory allocation */
    str = malloc(5 * sizeof(int));
    *str = 1;
    *(str + 1) = 2;
    *(str + 2) = 3;
    *(str + 3) = 4;
    *(str + 4) = 5;

    /* Reallocating memory */
    int i, j;

    for (i = 5; i > 0; i--) {
        str = realloc(str, i * sizeof(int));

        for (j = 0; j < i; j++) {
            printf("%d", *(str + j));
        }  

        printf("\n");
    }

    free(str);

    return(0);
}
  1. 在这个代码示例中,我可以确定较小的 realloc 会丢弃最高数字吗?

  2. realloc是否只是释放最后的内存并在str中保留相同的地址?或者地址可能会改变,即使它变得越来越小并且肯定在当前位置有 space?

  1. 是的。如果你有一个大小为 N 的内存块 p 并且你执行 realloc(p, M),那么(假设 realloc 成功),结果将包含第一个 min(N, M) 字节来自 p.

  2. 地址可以更改,即使新大小小于旧大小。 realloc 根本无法保证这种情况(甚至可能会失败)。