[t:/]$ 지식_

realloc의 할당 크기가 감소방향이면?

2016/04/15

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);

    }
}








[t:/] is not "technology - root". dawnsea, rss