减少重新分配
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);
}
在这个代码示例中,我可以确定较小的 realloc
会丢弃最高数字吗?
realloc
是否只是释放最后的内存并在str
中保留相同的地址?或者地址可能会改变,即使它变得越来越小并且肯定在当前位置有 space?
是的。如果你有一个大小为 N
的内存块 p
并且你执行 realloc(p, M)
,那么(假设 realloc
成功),结果将包含第一个 min(N, M)
字节来自 p
.
地址可以更改,即使新大小小于旧大小。 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);
}
在这个代码示例中,我可以确定较小的
realloc
会丢弃最高数字吗?realloc
是否只是释放最后的内存并在str
中保留相同的地址?或者地址可能会改变,即使它变得越来越小并且肯定在当前位置有 space?
是的。如果你有一个大小为
N
的内存块p
并且你执行realloc(p, M)
,那么(假设realloc
成功),结果将包含第一个min(N, M)
字节来自p
.地址可以更改,即使新大小小于旧大小。
realloc
根本无法保证这种情况(甚至可能会失败)。