realloc의 크기를 줄여가는 방향으로 반복 수행 할 경우, 최초의 포인터 위치가 유지될 것이라고 상상하기 쉽다. 실제로 해보니 그렇다. 이런 경우 복제 비용이 발생하지 않는다. 값싸게 사용할 수 있다. 멀티쓰레드라면 힙단편화 문제가 더 빨리 발생할 가능성은 있다. 싱글 쓰레드라면 힙단편화도 상대적으로 유연할 것이라고 예상해볼 수는 있다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M1G 1024*1024*1024L
int main()
{
char *p, *q;
long i;
p = malloc(M1G);
if (!p) {
printf("얼록 에러\n");
exit(-1);
}
q = p;
for (i = M1G; i > 0; i--) {
q=realloc(q , i);
if (p != q) {
printf("i = %ld, p = %p, q = %p\n", i, p, q);
break;
}
// printf("p = %p, q = %p\n", p, q);
}
}